1 条题解
-
0
#include <bits/stdc++.h> #define K 19260817 #define P 1000000007 #define U long long using namespace std;bool f[2]; const int N=1e6+5;U b[N],h[N],g[2]; int n,m,c[2],ans,e[2];char s[N],t[N]; U H(int l,int r){return (h[r]-h[l-1]*b[r-l+1]%P+P)%P;} int main(){ scanf("%s%s",s+1,t+1); n=strlen(s+1);m=strlen(t+1); for (int i=1;i<=n;i++) c[s[i]-'0']++;b[0]=1; for (int i=1;i<=m;i++) h[i]=(h[i-1]*K%P+(t[i]-'a'+1))%P, b[i]=b[i-1]*K%P; for (int i=1;;i++){ f[0]=f[1]=1;if (c[0]*i>=m) break; if ((m-c[0]*i)%c[1]) continue; e[0]=i;e[1]=(m-c[0]*i)/c[1]; for (int l=1,k=1;k<=n;k++){ int o=s[k]-'0'; if (f[o]) g[o]=H(l,l+e[o]-1),g[o]=H(l,l+e[o]-1),f[o]=0; else if (g[o]!=H(l,l+e[o]-1)) break; if (!f[0] && !f[1] && g[0]==g[1]) break; if (k==n) ans++;l+=e[o]; } } return printf("%d\n",ans),0; }
- 1
信息
- ID
- 6850
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者