hdu 4007 暴力枚举 Dave

题意:

       给你n个点,找存在于R里面的最多点数,包括边缘的点。

解:

      暴力枚举。将点按x排序。对于每个x,将在x+R范围内的点记录下来。从上到下枚举以谁作为上边界。每次找最大即可。

做题过程:

     哎,又是写错了一个地方肿么都看不出来。而且不是逻辑性错误,只是笔误而已。。。。

/*
Pro: 0

Sol:

date:
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <set>
#include <vector>
#define inf 1000000111
using namespace std;
int n,R,y[1111],ans;
struct point{
    int x,y;
    bool operator < (const point & cmp) const{
        return x < cmp.x;
    }
}p[1111];
int main(){
    while(scanf("%d%d",&n,&R) != EOF){
        ans = 0;
        int min_x = inf, min_y = inf, max_x = -inf, max_y = -inf;
        for(int i = 0; i < n; i ++){
            scanf("%d%d",&p[i].x, &p[i].y);
            min_x = min(min_x,p[i].x);
            max_x = max(max_x,p[i].x);
            min_y = min(min_y,p[i].y);
            max_y = max(max_y,p[i].y);
        }
        if(max_x - min_x <= R && max_y - min_y <= R){
//            cout << min_x << max_x << min_y << max_y << endl;
            printf("%d\n",n); continue;
        }
        sort(p,p + n);
        for(int i = 0; i < n; i ++){//以i的x为左边界
            int j = i, sub = 0;//不能等于i + 1,这样忽略了本身
            while(p[j].x <= p[i].x + R && j < n) {
                y[sub ++] = p[j].y;
                j ++;
            }
            sort(y,y + sub);  j = 0;
//            cout << sub << "  kakka  " << endl;
            for(int k = 0; k < sub && j < sub; k ++){//这里还要加上个j < sub
                while(y[j] <= y[k] + R && j < sub)   {
//                    printf("I will  %d\n",p[j].y); 哎,这里写成了p[j].y <= p[k].y + R 了,受上面的影响
                    j ++;//这里是小于sub。。。
                }
                ans = max(ans,j - k);
//                printf("%d   %d\n",i,ans);
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值