首页 > 代码库 > [POJ2456]Aggressive cows

[POJ2456]Aggressive cows

来源:USACO 2005 February Gold

思路:

二分牛棚相距长度,判断是否合法。

 1 #include<cstdio> 2 #include<cctype> 3 #include<algorithm> 4 inline int getint() { 5     char ch; 6     while(!isdigit(ch=getchar())); 7     int x=ch^0; 8     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^0); 9     return x;10 }11 const int N=100000;12 int n,c;13 int x[N];14 inline bool check(const int k) {15     int cnt=0,l=0;16     for(int i=1;i<n;i++) {17         if(x[i]-x[l]>=k) {18             cnt++;19             l=i;20         }21     }22     return cnt+1>=c;23 }24 int main() {25     n=getint(),c=getint();26     for(int i=0;i<n;i++) x[i]=getint();27     std::sort(&x[0],&x[n]);28     int l=0,r=x[n-1]-x[0];29     while(l<r) {30         int mid=(l+r)>>1;31         if(check(mid)) {32             l=mid+1;33         }34         else {35             r=mid;36         }37     }38     printf("%d\n",l-1);39     return 0;40 }

 

[POJ2456]Aggressive cows