二分 - Enduring Exodus - CodeForces - 655C
題意:
數據範圍:
Examples
Input:
7 2
0100100
_______
Output:
2
Input:
5 1
01010
_______
Output:
2
Input:
3 2
000
_______
Output:
1
分析:
代碼:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#define ll long long
#define P pair<int,int>
#define l first
#define r second
#define inf 0x3f3f3f3f
using namespace std;
const int N = 100010;
int n,m,sum[N];
char s[N];
bool check(int pos,int len)
{
int l=max(1,pos-len),r=min(n,pos+len);
return (sum[r]-sum[l-1]>=m+1);
}
int main()
{
cin>>n>>m;
scanf("%s",s+1);
for(int i=1;s[i];i++)
sum[i]=sum[i-1]+(s[i]=='0');
int res=n;
for(int i=1;i<=n;i++)
if(s[i]=='0')
{
int l=1,r=n;
while(l<r)
{
int mid=l+r>>1;
if(check(i,mid)) r=mid;
else l=mid+1;
}
res=min(res,l);
}
cout<<res<<endl;
return 0;
}