hdu(4007)正方形能框住最大的点数

暴搞呗。。。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
#define inf 1000300000
using namespace std;
const int N=1093;
struct Node
{
    int x,y;
}point[N];
int n,R;
bool cmp(Node a,Node b)
{
    return a.x<b.x;
}

int main()
{
   while(scanf("%d%d",&n,&R)!=EOF)
   {
    int max_x=-inf,min_x=inf,max_y=-inf,min_y=inf;
    for(int i=0;i<n;i++)
    {
        scanf("%d%d",&point[i].x,&point[i].y);
        min_x=min(point[i].x,min_x);
        max_x=max(point[i].x,max_x);
        min_y=min(point[i].y,min_y);
        max_y=max(point[i].y,max_y);
    }
    if((max_x-min_x<=R)&&(max_y-min_y<=R))
    {
        printf("%d\n",n);
        continue;
    }
    sort(point,point+n,cmp);
    int ans=0;
    for(int i=0;i<n;i++)
    {
        int fucky[N];
        int cnt=0;
        for(int j=i;j<n&&(point[i].x+R>=point[j].x);j++)
        {
           fucky[cnt++]=point[j].y;
        }
         sort(fucky,fucky+cnt);

         int cot=0,temp=0;
         for(int j=0;j<cnt&&temp<cnt;j++)
          {
             while(fucky[temp]-fucky[j]<=R&&temp<cnt)temp++;
              if(cot<temp-j)cot=temp-j;
          }
          ans=max(ans,cot);
    }
    printf("%d\n",ans);
   }
}

你可能感兴趣的:(hdu(4007)正方形能框住最大的点数)