P1824 进击的奶牛
题意:这一道题跟上一篇博客很类似;
给出n个栅栏的放置位置,有m只愤怒的奶牛要分隔在不同的栅栏当中,求出最近距离的最大值
思路:我们枚举这个最近距离的最大值
假如在当前枚举值的可以放置的奶牛个数大于等于m,就向右区间枚举
否则向左枚举
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int inf=0x3f3f3f3f; 4 const int maxn=1e5+10; 5 int a[maxn]; 6 int n,limit; 7 int check(int mid) 8 { 9 int last=1;int cnt=1; 10 for(int i=2;i<=n;i++){ 11 if(a[i]-a[last]>=mid){ 12 cnt++; 13 last=i; 14 } 15 else ; 16 } 17 if(cnt>=limit) return 1; 18 else return 0; 19 } 20 int main() 21 { 22 scanf("%d%d",&n,&limit); 23 for(int i=1;i<=n;i++){ 24 scanf("%d",&a[i]); 25 } 26 sort(a+1,a+1+n); 27 int L=0,R=inf; 28 int ans; 29 while(L<=R){ 30 int mid=L+R>>1; 31 if(check(mid)){ 32 L=mid+1; 33 ans=mid; 34 } 35 else{ 36 R=mid-1; 37 } 38 } 39 printf("%d\n",ans); 40 return 0; 41 }