wa 0pts,玄关求调
查看原帖
wa 0pts,玄关求调
1395826
outofmoves楼主2025/7/31 11:59
#include<bits/stdc++.h>
#define N 1000086
#define int long long
#define endl "\n"
#define mod 1000000007
using namespace std;
int bd[N],n,num[N];
string s;
inline int read();
signed main(){
	n=read();
	while(n--){
		memset(bd,0,sizeof(bd));
		memset(num,0,sizeof(num));
		cin>>s;
		for(int i=1;i<s.size();i++){
			int j=bd[i-1];
			while(j>0&&s[j]!=s[i]) j=bd[j-1];
			if(s[j]==s[i]) j++;
			bd[i]=j;
			num[i]=num[j-1]+1;
		}int ans=1;
		for(int i=1;i<s.size();i++){
			int j=bd[i];
			if(!j) continue;
			while(j>=(i+3)/2) j=bd[j-1]; 
			ans=ans*(num[j]+1)%mod;
		}
		cout<<ans%mod<<endl;
	}
	return 0;
}
inline int read(){
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9') {x=x*10+ch-48;ch=getchar();}
	return x*f;
}

2025/7/31 11:59
加载中...