poj 2456 Aggressive cows(二分搜素)

題意:直線上N個點,標記其中M個點,使得所有標記點之間最短距離最大,求這個最大的距離。

解題思路:簡單的二分搜索應用。




#include <iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
#define INF 1000000005
#define N 100005
int a[N];
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
            sort(a,a+n);
        int mi=0,ma=INF;
        int mid;
        while(ma-mi>1)
        {
            mid=(mi+ma)/2;
            int s=a[0];
            int cut=1;
            for(int i=1;i<n;i++)
            {
                if(s+mid<a[i])
                  {
                      s=a[i];
                      cut++;
                  }
            }
            if(cut>=m)
                mi=mid;
            else
                ma=mid;
        }
        printf("%d\n",ma);
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章