Scx117
只一眼,便辽阔了时间。

题意:给你一个二进制表示是否可以吃巧克力。一共有k个巧克力,第一天和最后一天必须吃。最小化每两次吃巧克力的最大间隔?

 

标程:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int read()
 4 {
 5    char ch=getchar();
 6    while (ch<'0'||ch>'9') ch=getchar();
 7    while ('0'<=ch&&ch<='9') return ch-'0';
 8 }
 9 const int N=200005;
10 int n,k,a[N],head,pos,l,r,ans,num;
11 bool check(int x)
12 { 
13    head=pos=1;num=0;
14     for (int i=1;i<n;i++)
15     {
16         if (!a[i]) pos=i; 
17         if (i==head+x+1) {
18             if (pos==head) return 0;
19             head=pos;num++;
20         }
21      }
22      return num+2<=k;
23 }
24 int main()
25 {
26     scanf("%d%d",&n,&k);
27     for (int i=1;i<=n;i++) a[i]=read();
28     l=0;r=n;
29     while (l<=r)
30     {
31         int mid=(l+r)>>1;
32         if (check(mid)) ans=mid,r=mid-1;else l=mid+1; 
33     }
34     printf("%d\n",ans);
35    return 0;
36 }

 

题解:二分答案

易错点:注意第一天和最后一天必须吃,特判一下。

posted on 2018-05-21 16:06  Scx117  阅读(247)  评论(0编辑  收藏  举报