先用map判重 然后用map记录距离如果再次出现就退出循环
#include<bits/stdc++.h>
#define w(a) while(a)
#define sf scanf
#define pf printf
#define b begin()
#define e end()
#define forup(a,b) for(i=a;i<=b;i++)
#define fordo(a,b) for(i=a;i>=b;i--)
using namespace std;
const int maxn=100000+20;
struct point
{
int x;int y;
bool operator <(const point& other) const
{
if (x< other.x)
{
return true;
}
return false;
}
}p[maxn];
int sp(point a,point b)
{
return abs(a.x-b.x)+abs(a.y-b.y);
}
int main()
{
int T;
sf("%d",&T);
w(T--)
{
//cout<<INT_MAX<<endl;
map<point,int>visit;
map<int,int>fuck;
int n,m,i,cur=1,flag=0;
sf("%d%d",&n,&m);
forup(1,n)
{
point tem;
scanf("%d%d",&tem.x,&tem.y);
if(visit[tem]==0)
{
visit[tem]=1;
p[cur++]=tem;
}
}
sort(p+1,p+cur);
forup(1,cur-1)
{
for(int j=i+1;j<=cur-1;j++)
{
int dist=abs(p[i].x-p[j].x)+abs(p[i].y-p[j].y);
if(fuck[dist]==0)
{
fuck[dist]=1;
}
else
{
flag=1;
break;
}
}
if(flag) break;
}
if(flag) puts("YES");
else puts("NO");
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-1309864.html