zoukankan      html  css  js  c++  java
  • POJ2456 Aggressive cows(二分+贪心)

    如果C(d)为满足全部牛之间的距离都不小于d。

    先对牛舍的位置排序,然后二分枚举d,寻找满足条件的d。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<vector>
    #include<cmath>
    #define ll __int64
    #define INF 0x3fffffff
    using namespace std;
    
    int n,m;
    int x[100005];
    
    bool C(int d)
    {
        int num=1;
        int a=x[0];
        int i=1;
        while(num<m)
        {
            if(a+d<=x[i])
            {
                num++;
                a=x[i];
                i++;
            }
            else i++;
            if(i==n) break;
        }
        if(num==m) return true;
        else return false;
    }
    
    void solve()
    {
        int l=0,r=x[n-1]+1;
        while(r-l>1)
        {
            int mid=(r+l)/2;
            if(C(mid)) l=mid;
            else r=mid;
        }
        cout<<l<<endl;
    }
    
    int main()
    {
        //freopen("d:\Test.txt","r",stdin);
        cin>>n>>m;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&x[i]);
        }
        sort(x,x+n);
        solve();
        return 0;
    }
    


  • 相关阅读:
    Java
    Spring
    Q&A
    Q&A
    Q&A
    Spring
    Elasticsearch部署及基本概念
    rust(二) 变量及类型
    rust(一) 一些命令
    vim笔记
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6718771.html
Copyright © 2011-2022 走看看