POJ 2456 Aggressive cows

出口判断要注意。。wa了几次。。

#include<stdio.h>
#include<algorithm>
using namespace std;
int cow[100010];
int main()
{
    int n,c;
    scanf("%d%d",&n,&c);
    int i;
    for(i=1;i<=n;i++)
        scanf("%d",&cow[i]);
    sort(cow+1,cow+1+n);
    int left=0;
    int right=cow[n]-cow[1];
    int mid;
    int ans=0;
    while(left<=right)
    {
        mid=(left+right)/2;
        int distance=0;
        int count=1;
        for(i=2;i<=n;i++)
        {
            distance=distance+cow[i]-cow[i-1];
            if(distance>=mid)
            {
                distance=0;
                count++;
            }
        }
        if(count>=c)
            left=mid+1;
        else 
        {
            right=mid-1;
            ans=right;//至于为何选择right作为答案。。尝试了好久才知道。。个人认为count可能一辈子都不等于c(答案可能不是while语句产生的),所以无法用count==c判断。。出口的设置是left<=right,所以right一定是答案。。也可是left-1//
        }
    }
    printf("%d\n",ans);
    return 0;
}

你可能感兴趣的:(poj,二分)