Teacher Bo
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 24 Accepted Submission(s): 12
Problem Description
Teacher BoBo is a geography teacher in the school.One day in his class,he marked
N
points in the map,the
i
-th point is at
(Xi,Yi)
.He wonders,whether there is a tetrad
(A,B,C,D)(A<B,C<D,A≠CorB≠D)
such that the manhattan distance between A and B is equal to the manhattan distance between C and D.
If there exists such tetrad,print "YES",else print "NO".
If there exists such tetrad,print "YES",else print "NO".
Input
First line, an integer
T
. There are
T
test cases.
(T≤50)
In each test case,the first line contains two intergers, N, M, means the number of points and the range of the coordinates. (N,M≤105) .
Next N lines, the i -th line shows the coordinate of the i -th point. (Xi,Yi)(0≤Xi,Yi≤M) .
In each test case,the first line contains two intergers, N, M, means the number of points and the range of the coordinates. (N,M≤105) .
Next N lines, the i -th line shows the coordinate of the i -th point. (Xi,Yi)(0≤Xi,Yi≤M) .
Output
T
lines, each line is "YES" or "NO".
Sample Input
2 3 10 1 1 2 2 3 3 4 10 8 8 2 3 3 3 4 4
Sample Output
YES NO
求是否有不一样的两个点之间的曼哈顿距离相同。
因为题目中限制了x,y的范围是M 那么曼哈顿距离最多只会有 2*M个 也就是200000
所以每组数据最多只会计算200000次
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>
#include<map>
#include<algorithm>
#define ll unsigned long long
using namespace std;
struct node
{
int x,y;
}e[100010];
bool vis[200020];
int n,m;
int Abs(int a)
{
if(a<0) a=-a;
return a;
}
void init()
{
for(int i=0;i<=2*m;i++) vis[i]=false ;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
int len=Abs(e[i].x-e[j].x)+Abs(e[i].y-e[j].y);
if(!vis[len])
{
vis[len]=true ;
}
else if(len!=0)
{
printf("YES\n");
return ;
}
}
}
printf("NO\n");
return ;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%d%d",&e[i].x,&e[i].y);
init();
}
}