Nyoj 586 疯牛

来源:互联网 发布:js事件绑定 编辑:程序博客网 时间:2024/05/16 11:20

题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=586

分析:最大值最小,二分逼近

由于任何两头牛之间距离大于等于0,其最大距离不会超过arr[n-1]-arr[0],其中arr为栅栏的编号;利用二分不断逼近,直至最合理的值!

#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int MAXN = 100010;int n, num;int arr[MAXN];bool Judge(int dis){    int cnt = 1, iCurdis = arr[0];    for(int i = 1; i < n; ++i)    {        if(arr[i] - iCurdis >= dis)        {            cnt++;            iCurdis = arr[i];            if(cnt == num)                return true;        }    }    return false;}int Binary_Slove(){    int l = 0, r = arr[n-1] - arr[0], mid;    while(l <= r)    {        mid = (l+r) >> 1;        if(Judge(mid))            l = mid+1;        else            r = mid-1;    }    return l-1;}int main(){    int i;    while(~scanf("%d %d", &n, &num))    {        for(i = 0; i < n; ++i)            scanf("%d", &arr[i]);        sort(arr, arr+n);        printf("%d\n", Binary_Slove());    }    return 0;}



0 0
原创粉丝点击