1 条题解
-
1
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll MOD=1e9+7; int n,fail[1000010],ans[1000010];ll cnt;char a[1000010]; int main(){ int T,i,j;scanf("%d",&T); while(T--){ scanf("%s",a);n=strlen(a); memset(fail,0,sizeof(fail)); j=0;ans[0]=0;ans[1]=1; for(i=1;i<n;i++){//求解next while(j&&(a[i]!=a[j])) j=fail[j]; j+=(a[i]==a[j]);fail[i+1]=j;ans[i+1]=ans[j]+1;//递推记录ans } j=0;cnt=1; for(i=1;i<n;i++){//求解num while(j&&(a[i]!=a[j])) j=fail[j]; j+=(a[i]==a[j]); while((j<<1)>(i+1)) j=fail[j]; cnt=(cnt*(ll)(ans[j]+1))%MOD;//记得+1 } printf("%lld\n",cnt); } }
- 1
信息
- ID
- 1324
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 10
- 已通过
- 8
- 上传者