題意:問n個點中是否存在兩對不同的點的曼哈頓距離相等。
思路:因爲0<n,m<100000,所以曼哈頓距離最多爲200000,直接暴力求沒對點的曼哈頓距離,當計算次數>200000,一定存在兩對點曼哈頓距離相同。
注意判斷是否存在相同的點。
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<sstream>
#include<iostream>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
int main(){
// freopen("input.txt","r",stdin);
map<int,int> MAP_long;
map<int,int> MAP_Y;
int n,m,a[100005],b[100005];
int t;
scanf("%d",&t);
while(t--){
MAP_long.clear();
MAP_Y.clear();
int sign=0,num=0;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d%d",&a[i],&b[i]);
if(MAP_Y[a[i]*100000+b[i]]==1 || sign==1)
continue;
MAP_Y[a[i]*100000+b[i]]=1;
for(int j=0;j<i;j++){
int L=abs(a[i]-a[j])+abs(b[i]-b[j]);
// printf("a[%d]=%d a[%d]=%d b[%d]=%d b[%d]=%d\n",i,a[i],j,a[j],i,b[i],j,b[j]);
MAP_long[L]+=1;
// printf("L=%d\n",L);
if(MAP_long[L]>=2)
sign=1;
num++;
}
if(num>200000){
sign=1;
break;
}
}
if(sign==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}