0
点赞
收藏
分享

微信扫一扫

HDU 5762 Teacher Bo


Problem Description


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".


 



Input


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).


 



Output


T


 



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



问是否有相同的曼哈顿距离,M<=1e5,所以根据抽屉原理就可以知道,如果全部的边数大于2*M-2,那肯定有相同的啊,不然的话就暴力好了


#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<bitset>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#define rep(i,j,k) for (int i = j; i <= k; i++)
#define per(i,j,k) for (int i = j; i >= k; i--)
using namespace std;
typedef long long LL;
const int low(int x) { return x&-x; }
const int mod = 1e9 + 7;
const int N = 1e5 + 10;
const int INF = 0x7FFFFFFF;
int T, n, m, f[N * 2];
int x[N], y[N];

int main()
{
scanf("%d", &T);
while (T--)
{
scanf("%d%d", &n, &m);
rep(i, 1, n) scanf("%d%d", &x[i], &y[i]);
if (1LL * n*(n - 1) / 2 > 2 * m) printf("YES\n");
else
{
int flag = 0;
rep(i, 1, 2 * m) f[i] = 0;
rep(i, 1, n)
{
rep(j, i + 1, n)
{
if (f[abs(x[i] - x[j]) + abs(y[i] - y[j])]) flag = 1;
else f[abs(x[i] - x[j]) + abs(y[i] - y[j])] = 1;
if (flag) break;
}
if (flag) break;
}
printf("%s\n", flag ? "YES" : "NO");
}
}
return 0;
}



举报

相关推荐

0 条评论