codeforces 165C Another Problem on Strings 二分or双指针
题意:给一个01字符串s,找出s包含恰好k个1的连续字串个数
解法:
显然是简单的双指针or二分的题,但由于k=0的存在,使得双指针的边界条件十分难写,所以应该选择二分!
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1000100; const int INF=(1<<29); int k; ll sum[maxn]; char s[maxn]; void solve(){ scanf("%s",s+1); int n=strlen(s+1); sum[0]=0; for(int i=1;i<=n;i++) sum[i]=sum[i-1]+s[i]-'0'; ll res=0; for(int i=1;i<=n;i++){ int l=lower_bound(sum+i,sum+n+1,k+sum[i-1])-sum; int r=upper_bound(sum+i,sum+n+1,k+sum[i-1])-sum; if(l==n+1) break; res+=r-l; } cout<<res<<endl; } int main(){ // freopen("in.txt","r",stdin); while(cin>>k) solve(); return 0; }
浙公网安备 33010602011771号