Hdu5762

Hdu5762

题意:

你n个点,让你找两个数对,A,B和C,D,使得A和B的曼哈顿距离等于C和D的曼哈顿距离,问是否存在这样的对,A!=C且B!=D。

解法:

直接暴力判断,时间复杂度是 $ O(n^2) $
如果单纯的看数据范围的话好像一定会TLE,但是根据鸽笼原理,保证了在一定的数据范围内一定有合法解出现,这就保证了我们一定不会TLE。

CODE:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

#define LL long long
const int N = 1e5 + 100;

struct Node {
    LL x,y;
}a[N];
LL T,n,m;
bool flag,vis[2*N+100];

inline LL calc(Node a,Node b) {
    return abs(a.x - b.x) + abs(a.y - b.y);
}

int main() {
    scanf("%lld",&T);
    while(T--) {
        flag = false;
        memset(vis,false,sizeof(vis));
        scanf("%lld%lld",&n,&m);
        for(int i = 0 ; i < n ; i++) {
            scanf("%lld%lld",&a[i].x,&a[i].y);
            if(!flag) {
                for(int j = 0 ; j < i ; j++) {
                    LL k = calc(a[i],a[j]);
                    if(vis[k]) {
                        flag = true;
                        break;
                    }
                    else vis[k] = true;
                }
            }
        }
        if(flag) puts("YES");
        else puts("NO");
    }
    return 0;
}
posted @ 2019-08-30 22:13  西窗夜雨  阅读(169)  评论(0编辑  收藏  举报