zoukankan      html  css  js  c++  java
  • POJ-2456(二分+贪心)

    题意:
        有n个牛栏,选m个放进牛,相当于一条线段上有 n 个点,选取 m 个点,
    使得相邻点之间的最小距离值最大

    思路:贪心+二分
    二分枚举相邻两牛的间距,判断大于等于此间距下能否放进所有的牛。

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #define max 100005
    using namespace std;
    int n,c,a[max];
    bool judge(int d) {
        int index = 0, num=1;
        for(int i=1;i<n;i++){
            if(a[i]-a[index]>=d){
                index = i;
                num++;
            } 
            if(num>=c) return true;
        } 
        return false;
    }
    int main() {
    
        while(scanf("%d%d",&n,&c)!=EOF) {
            for(int i=0; i<n; i++) {
                scanf("%d",&a[i]);
            }
            sort(a,a+n);
            int l,r,ans;
            l = 1; r = a[n-1]-a[0]; ans = 0;
            while(l<=r) {
                int mid = (l+r)>>1;
                if(judge(mid)) {
                    ans = mid;
                    l = mid+1;
                } else {
                    r = mid -1;
                }
            }
            cout<<ans<<endl;
        }
    
        return 0;
    }
  • 相关阅读:
    ammap demo
    sql批量新增和修改
    js右键菜单
    C# 索引器
    NUnit使用体会
    js拖动效果
    Js 原型对象与原型链(转)
    sql for xml子句
    ASP.NET应用程序生命周期
    HttpWebRequest和HttpWebResponse
  • 原文地址:https://www.cnblogs.com/Lemon1234/p/11607132.html
Copyright © 2011-2022 走看看