您的位置:首页 > 其它

hdu5762(2016多校第三场,思维题)

2016-07-28 11:28 423 查看

Teacher Bo

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 1532    Accepted Submission(s): 593


[align=left]Problem Description[/align]
Teacher BoBo is a geography teacher in the school.One day in his class,he markedN
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".
 

[align=left]Input[/align]
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).
 

[align=left]Output[/align]
T
lines, each line is "YES" or "NO".
 

[align=left]Sample Input[/align]

2
3 10
1 1
2 2
3 3
4 10
8 8
2 3
3 3
4 4

 

[align=left]Sample Output[/align]

YES
NO

题意:给出一个已知坐标范围的点集,找出可能的曼哈顿距离相等的两组点对,如果存在输出yes,不存在输出no。

思路:这题主要是给你了点集的范围,所以得从这里入手,如果最大的点集范围是m,那么最大的曼哈顿距离就是2*m,那么就可以用数组来记录是否有重叠的,当然,也就是说如果遍历次数超过了2*m次,肯定存在曼哈顿距离相等的两个点对。

#include <iostream>
#include<string.h>
#include<vector>
#include<queue>
#include<algorithm>
#include<stdio.h>
#include<math.h>
using namespace std;
typedef long long ll;
struct data
{
int x,y;
} p[100010];

bool vis[200010];

int dd(int x,int y)
{
return abs(p[x].x-p[y].x)+abs(p[x].y-p[y].y);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(vis,0,sizeof(vis));
int n,m,jl;
scanf("%d%d",&n,&m);
jl=2*m;
for(int i=0; i<n; i++)
scanf("%d%d",&p[i].x,&p[i].y);
int flag=0;
for(int i=0; i<n; i++)
{
for(int j=i+1; j<n; j++)
{
int h1=dd(i,j);
if(vis[h1]==0)
{
vis[h1]=1;
}
else if(vis[h1]==1)
{
flag=1;
break;
}
}
if(flag)break;
}

if(flag)printf("YES\n");

else printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 大二