rt,历史残留问题
同学们瞎写发现了这个可以ac:
https://www.luogu.com.cn/discuss/439544
但是似乎没有在题解区有合理的解释。
有大佬能给个证明吗?
#include<bits/stdc++.h>
using namespace std;
int T,nxt[1000001],f[1000001];
char a[1000001];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>T;
while(T--)
{
memset(nxt,0,sizeof(nxt));
memset(f,0,sizeof(f));
cin>>a+1;
int n=strlen(a+1);
int j=0;
long long res=1;
for(int i=2;i<=n;i++)
{
while(j&&a[i]!=a[j+1])j=nxt[j];
if(a[i]==a[j+1])j++;
nxt[i]=j;
}
for(int i=1;i<=n;i++)
{
int c=nxt[i],ans=0;
while(c)
{
if(2*c<=i)ans++;
c=nxt[c];
if(f[c])
{
ans+=f[c];
break;
}
}
f[i]=ans+1;
res*=(ans+1);
res%=1000000007;
}
cout<<res<<"\n";
}
}