• poj3779(二分答案)


    Corral the Cows
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 1196   Accepted: 502

    Description

    Farmer John wishes to build a corral for his cows. Being finicky beasts, they demand that the corral be square and that the corral contain at least C (1 <= C <= 500) clover fields for afternoon treats. The corral's edges must be parallel to the X,Y axes.

    FJ's land contains a total of N (C <= N <= 500) clover fields, each a block of size 1 x 1 and located at with its lower left corner at integer X and Y coordinates each in the range 1..10,000. Sometimes more than one clover field grows at the same location; such a field would have its location appear twice (or more) in the input. A corral surrounds a clover field if the field is entirely located inside the corral's borders.

    Help FJ by telling him the side length of the smallest square containing C clover fields.

    Input

    Line 1: Two space-separated integers: C and N

    Lines 2..N+1: Each line contains two space-separated integers that are the X,Y coordinates of a clover field.

    Output

    Line 1: A single line with a single integer that is length of one edge of the minimum size square that contains at least C clover fields.

    Sample Input

    3 4
    1 2
    2 1
    4 1
    5 2

    Sample Output

    4

    Hint

    Explanation of the sample:

    |*   *
    
    | * *
    +------
    Below is one 4x4 solution (C's show most of the corral's area); many others exist.

    |CCCC
    
    |CCCC
    |*CCC*
    |C*C*
    +------

    Source

    二分边长进去检查

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    struct my{
        int x,y;
    };
    
    my a[1000];
    int mid;
    int tmp[1000];
    int c,n;
    
    bool cmp(const my &a,const my &b){
         return a.x<b.x;
    }
    
    bool judge(int l,int r)
    {
        int cnt=0;
        for(int i=l; i<=r; ++i) tmp[++cnt]=a[i].y;
        sort(tmp+1,tmp+cnt+1);
        for(int i=c; i<=cnt; ++i)
            if(tmp[i]-tmp[i-c+1]<=mid) return 1;
        return 0;
    }
    bool check(int x)
    {
        int l=1,r=1;
        for(; r<=n; ++r)
        {
            if(a[r].x-a[l].x>x)
                if(judge(l,r-1)) return 1;
            for(; a[r].x-a[l].x>x; ) l++;
        }
        return judge(l,n);
    }
    int main(){
        int x,y;
        scanf("%d%d",&c,&n);
        for (int i=1;i<=n;i++){
            scanf("%d%d",&x,&y);
            a[i].x=x;
            a[i].y=y;
        }
        sort(a+1,a+1+n,cmp);
        int l=0,r=10000;
        int ans=0;
        while(l<=r){
            mid=(l+r)>>1;
            if(check(mid)){
                r=mid-1;
                ans=mid+1;
            }
            else l=mid+1;
        }
        printf("%d",ans);
    return 0;
    }
  • 相关阅读:
    .net remoting学习(2)MarshalByRefObject与对象激活
    Android之旅Service
    Android之旅Handler与多线程
    Android之旅广播(BroadCast)
    .net remoting学习(3) 配置与服务端广播
    网址收藏
    Asp.net生命周期
    Android API 拦截系统短消息
    TCL脚本语言学习
    实现一个包含Microsoft.Advertising和SmartMad广告控件的UserControl
  • 原文地址:https://www.cnblogs.com/lmjer/p/8970478.html
Copyright © 2020-2023  润新知