天哪!!菜到家啦。
数学+思维。
首先求出一个周期内cnt0-cnt1=c的个数,如果C=0,那么只要在一个周期内有前缀等于x,那么答案就是-1,否则答案就是0
如果C!=0,列一下方程x=t*c+a.即x-a=t*c。,要求t为大于等于0的整数,也就是我们的判断条件。。。。唉。
#include<bits/stdc++.h> using namespace std; void solve() { int cnt1=0,cnt0=0; int n,x; cin>>n>>x; int ans=0; if(x==0) ans++; string s; cin>>s; for(int i=0;i<n;i++){ if(s[i]=='0') cnt0++; else cnt1++; } int c=cnt0-cnt1; if(c==0){ if(x==0){ cout<<-1<<endl; return ; } else { cnt1=0; cnt0=0; for(int i=0;i<n;i++){ if(s[i]=='1') cnt1++; else cnt0++; if(cnt0-cnt1==x) ans++; } if(ans>0) cout<<-1<<endl; else cout<<0<<endl; } } else { cnt0=0; cnt1=0; for(int i=0;i<n;i++){ if(s[i]=='1') { cnt1++; } else cnt0++; int a=cnt0-cnt1; if((x-a)%c==0&&(x-a)/c>=0) ans++; } cout<<ans<<endl; } return ; } int main() { int t; cin>>t; while(t--) solve(); return 0; }