为什么num【1】=1..题目不是不能重叠吗,题目也写着num【1】=0
查看原帖
为什么num【1】=1..题目不是不能重叠吗,题目也写着num【1】=0
141659
剑星楼主2021/8/31 16:18

写num【1】=0是错的

#include<bits/stdc++.h>
using namespace std;
int mod=1e9+7;
int n;
string s,s1;
long long nex[1000011],num[1000011],ans;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		memset(nex,0,sizeof(nex));
		memset(num,0,sizeof(num));
		cin>>s;
		s=" "+s;
		ans=1;
		num[1]=1;
		for(int i=2,j=0;i<s.size();i++)
		{
			while(j>0&&s[i]!=s[j+1])
				j=nex[j];
			if(s[i]==s[j+1])
				j++;
			nex[i]=j;
			num[i]=num[j]+1;
		}
		for(int i=2,j=0;i<s.size();i++)
		{
			while(j>0&&s[i]!=s[j+1])
				j=nex[j];
			if(s[i]==s[j+1])
				j++;
			while((j<<1)>i)
				j=nex[j];
			ans=(ans*(num[j]+1))%mod;
		}
	//	for(int i=1;i<s.size();i++)
	//		cout<<nex[i]<<" ";
		printf("%lld\n",ans);
	}
}
2021/8/31 16:18
加载中...