题解:CF1295B Infinite Prefixes
yushihan123 · · 题解
首先我们可以定义
可以发现,如果继续拼接s,
那么只需要枚举
接下来考虑什么时候输出
注意如果
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
char s[N];
int a[N];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,x;
scanf("%d%d",&n,&x);
scanf("%s",s+1);
int cnt0=0,cnt1=0;
for(int i=1;i<=n;i++){
if(s[i]=='0') cnt0++;
else cnt1++;
a[i]=cnt0-cnt1;
}
int len=cnt0-cnt1,cnt=0,f=0;
if(len==0){
for(int i=1;i<=n;i++){
if(a[i]==x){
f=1;
break;
}
}
if(f){
printf("-1\n");
continue;
}
printf("0\n");
continue;
}
for(int i=1;i<=n;i++){
if(a[i]<x&&len<0||a[i]>x&&len>0) continue;
if(abs(a[i]-x)%abs(len)==0) cnt++;
}
if(f){
printf("-1\n");
continue;
}
if(x==0) cnt++;
printf("%d\n",cnt);
}
return 0;
}