[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 }