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;
}
有些路你和某人一起走,就长得离谱,你和另外一些人走,就短得让人舍不得迈开脚步。