ZF_20160708_Region2014广东

来源:互联网 发布:数据检索的作业包括 编辑:程序博客网 时间:2024/04/26 05:01

A题
CDQ分治,待做。

B题
枚举矩形的左下角和右上角。

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct Pt{    int x;    int y;}p[35];struct Rect{    int x1;    int y1;    int x2;    int y2;}r[1000];int vis[210][210];int main(){    int n;    while (scanf("%d", &n) && n)    {        int l = 0;        memset(vis, 0, sizeof(vis));        int i, j, k;        for (i = 0; i < n; i++)        {            scanf("%d%d", &p[i].x, &p[i].y);            vis[p[i].x][p[i].y] = 1;        }        for (i = 0; i < n; i++)        {            for (j = p[i].x + 1; j <= 200; j++)            {                if (vis[j][p[i].y])                {                    for (k = p[i].y + 1; k <= 200; k++)                    {                        if (vis[p[i].x][k] && vis[j][k])                        {                            r[l].x1 = p[i].x;                            r[l].y1 = p[i].y;                            r[l].x2 = j;                            r[l].y2 = k;                            l++;                        }                    }                }            }        }        int sum = 0;        for (i = 0; i < l; i++)        {            for (j = i + 1; j < l; j++)            {                int s = 0;                if ((r[i].x1 - r[j].x1) * (r[i].x2 - r[j].x2) < 0 && (r[i].y1 - r[j].y1) * (r[i].y2 - r[j].y2) < 0)                {                    s = max((r[i].y2 - r[i].y1) * (r[i].x2 - r[i].x1), (r[j].y2 - r[j].y1) * (r[j].x2 - r[j].x1));                }                else if (r[i].x1 > r[j].x2 || r[i].x2 < r[j].x1 || r[i].y1 > r[j].y2 || r[i].y2 < r[j].y1)                {                    s = (r[i].y2 - r[i].y1) * (r[i].x2 - r[i].x1) + (r[j].y2 - r[j].y1) * (r[j].x2 - r[j].x1);                }                sum = max(sum, s);            }        }        if (sum)printf("%d\n", sum);        else printf("ivis\n");    }}

E题
时间给的比较宽,所以暴力就可以了。

0 0