题解:
坐标(0,m)的话,闭区间,可能一共有多少曼哈顿距离?
2m
但是给一个n,可能存在n(n+1)/2个曼哈顿距离
所以可以用抽屉原理了
当n比抽屉的数量大,直接输出yes
不用计算
那。。。NO呢
那就暴力
n^2
这个n肯定不会太大
队友code……..
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <queue>
#include <stack>
using namespace std;
#define INF 0x3f3f3f
#define pi acos(-1.0)
#define MAX 200010
#define mod 9973
#define ll long long
int n,m;
int dist[MAX];
struct node
{
int x,y;
}d[MAX];
bool cmp(node a,node b)
{
if(a.x==b.x)
return a.x<b.x;
return a.y<b.y;
}
int main()
{
int t,i,j,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(dist,0,sizeof(dist));
for(i=0;i<n;i++)
scanf("%d%d",&d[i].x,&d[i].y);
sort(d,d+n,cmp);
ll sum=2*m;
if(n>2*m)
{
printf("YES\n");
continue;
}
ll cont=0;
int flag=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
cont++;
int a=abs(d[i].x-d[j].x)+abs(d[i].y-d[j].y);
dist[a]++;
if(dist[a]>1||cont>MAX)
{
flag=1;
break;
}
}
if(flag)
break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}