首页 > 代码库 > HUD 4007 [扫描线][序]

HUD 4007 [扫描线][序]

/*
大连热身B题

不要低头,不要放弃,不要气馁,不要慌张
题意:
坐标平面内给很多个点,放置一个边长为r的与坐标轴平行的正方形,问最多有多少个点在正方形内部。

思路:
按照x先排序,然后确定x在合法范围内后按照y排序,进行扫描线。
*/







#include<bits/stdc++.h>
using namespace std;
bool vis[1050];
struct st{
    void read(){
        scanf("%d%d",&x,&y);
    }
    int x,y;
};
st jilu[1050];
bool cmp(st a,st b){
    return a.x<b.x;
}
bool cmp2(st a,st b){
    return a.y<b.y;
}
int main()
{
    int n,r;
    while(scanf("%d%d",&n,&r)!=EOF){
        int ans=1;
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)jilu[i].read();
        sort(jilu,jilu+n,cmp);
        int ed=0;
        for(int i=0;i<n;i++){
            while(ed<n&&jilu[ed].x<=jilu[i].x+r)ed++;
            sort(jilu+i,jilu+ed,cmp2);
            int num=1;
            int st=i;
            for(int j=i+1;j<ed;j++){
                while(jilu[st].y<jilu[j].y-r)st++;
                ans=max(ans,j-st+1);
            }
            sort(jilu+i,jilu+ed,cmp);
        }
        printf("%d\n",ans);
    }
}

 

HUD 4007 [扫描线][序]