Teacher Bo
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 795 Accepted Submission(s): 443
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
这题数据很弱的样子,随便写写就过了。。。。
将点看成pair存入set,然后枚举每个点对,将亮点距离存起来,一旦再次出现该距离就退出循环直接打印yes
循环结束还未找打就输出no
下面贴代码:
#include <iostream>
#include <cstring>
#include <map>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
#include <cmath>
using namespace std;
const long long maxn=1e7;
int possible[maxn];
set<pair<int,int>> save;
int main(){
int t,n,m;
scanf("%d",&t);
while(t--){
memset(possible, 0, sizeof(possible));
save.clear();
pair<int,int> k;
scanf("%d%d",&n,&m);
while(n--){
int a,b;
scanf("%d%d",&a,&b);
k = make_pair(a, b);
save.insert(k);
}
/*for(set<pair<int,int>>::iterator it=save.begin();it!=save.end();it++){
cout<<it->first<<" "<<it->second<<endl;
}*/
int god=0;
for(set<pair<int,int>>::iterator i=save.begin();i!=save.end();i++){
for(set<pair<int,int>>::iterator j=i;j!=save.end();j++){
if(j==i){
continue;
}
unsigned dis=abs(i->first-j->first)+abs(i->second-j->second);
if(possible[dis]==0){
possible[dis]=1;
}else{
god=1;
goto here;
}
}
}
here:
if(god){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
return 0;
}