#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
using namespace std;
const int N=100005;
struct Point{ //定义结构体表示点
int x,y;
}point[N];
int dis(Point x1,Point x2){ //计算曼哈顿距离
return abs(x1.x-x2.x)+abs(x1.y-x2.y);
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m;
map<int,int> bucket;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d %d",&point[i].x,&point[i].y);
}
bool flag=0;
for(int i=1;i<=n-1;i++){
if(flag) break;
for(int j=i+1;j<=n;j++){
int d=dis(point[i],point[j]); //任意两点计算曼哈顿距离存储
if(bucket[d]!=d) bucket[d]=d;
else {
printf("%s\n","YES");
flag=1;
break;
}
}
}
if(!flag) printf("%s\n","NO");
}
}
此题关键是会有重复的点 就会有重复的距离 应该用Set或者Map存储;
用Set或者Map存点或者距离都可以 只要保证不要重复;
计算时要注意点按输入顺序来计算距离;
最后如果有相等的距离就输出YES否则输出NO;