4007 Dave(The 36th ACM/ICPC Asia Regional Dalian Site —— Online Contest)

来源:互联网 发布:酷友网络 编辑:程序博客网 时间:2024/05/12 15:50

Dave

Problem Description
Recently, Dave is boring, so he often walks around. He finds that some places are too crowded, for example, the ground. He couldn’t help to think of the disasters happening recently. Crowded place is not safe. He knows there are N (1<=N<=1000) people on the ground. Now he wants to know how many people will be in a square with the length of R (1<=R<=1000000000). (Including boundary).

Input
The input contains several cases. For each case there are two positive integers N and R, and then N lines follow. Each gives the (x, y) (1<=x, y<=1000000000) coordinates of people.

Output
Output the largest number of people in a square with the length of R.

Sample Input
3 2
1 1
2 2
3 3
一共只有1000个点,先依次将其中的一个点作为标准点与其他点比较,如果两个点的范围在r之间就放入x数组中,然后再比较x数组中有几个点的范围在r之间,取最大值就行

#include<bits/stdc++.h>using namespace std;using LL =int64_t;struct Node {    LL x,y;}E[1005];LL x[1005],y[1005];int main(){    ios::sync_with_stdio(0);    cin.tie(0);    LL n,r;    while(cin>>n>>r) {        for(int i=0;i<n;i++) cin>>E[i].x>>E[i].y;        for(int i=0;i<n;i++) y[i]=E[i].y;        sort(y,y+n);        int cnt=0,temp;        for(int i=0;i<n;i++) {                temp=0;            for(int j=0;j<n;j++)                if(E[j].y<=y[i]+r&&E[j].y>=y[i]) x[temp++]=E[j].x;            sort(x,x+temp);            int ans=0;            x[temp++]=2e9;            for(int j=0;j<temp-1;j++) {                while(x[ans]<=x[j]+r) ans++;                cnt=max(cnt,ans-j);            }        }        cout<<cnt<<endl;    }    return 0;}
阅读全文
0 0