P1824 进击的奶牛

题意:这一道题跟上一篇博客很类似;

   给出n个栅栏的放置位置,有m只愤怒的奶牛要分隔在不同的栅栏当中,求出最近距离的最大值

思路:我们枚举这个最近距离的最大值

   假如在当前枚举值的可以放置的奶牛个数大于等于m,就向右区间枚举

                           否则向左枚举

 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 }
View Code

 

posted @ 2020-04-10 22:58  古比  阅读(232)  评论(0编辑  收藏  举报