1 条题解

  • 0
    @ 2026-5-5 16:45:53
    #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
    上传者