本文共 1134 字,大约阅读时间需要 3 分钟。
题意:
#include #include #include #include #include #include #include #include #include using namespace std;#define eps 1e-8typedef __int64 LL;/*以一个判断条件进行判断条件,即区间和>=k+1;*/const int N=1e5+10;const int INF=1e5+10;char s[N];int sum[N];int ans;int n,k;//其实最近的话,可想而知这个FJ在比较中间的bool Judge(int pos,int len){ int L=max(1,pos-len); int R=min(n,pos+len); return (sum[R]-sum[L-1])>=(k+1);}int solve(int pos){ int s=1,t=n; while(s<=t) { int mid=(s+t)/2; if(Judge(pos,mid))//以某个位置,满足区间和>=k+1,然后逐步逼近这个mid { ans=mid; t=mid-1; } else s=mid+1; } return ans;}int main(){ scanf("%d%d",&n,&k); scanf("%s",s+1); memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++) { if(s[i]=='0') sum[i]=sum[i-1]+1; else sum[i]=sum[i-1]; } int ans=INF; for(int i=1;i<=n;i++) { if(s[i]=='1') continue; ans=min(ans,solve(i)); } printf("%d\n",ans); return 0;}
转载于:https://www.cnblogs.com/keyboarder-zsq/p/5934881.html