O2后50分TLE求调
查看原帖
O2后50分TLE求调
452438
_Minecraft12345楼主2023/10/3 16:30

一种奇怪的方法,kmp,但和题解好像有很多出入

#include<bits/stdc++.h>
using namespace std;
int length=1;
int nxt[1000010];
string s;
void getnxt() {
	nxt[0]=-1;
	nxt[1]=0;
	for(int i=2; i<=length; i++) {
		int k=nxt[i-1];
		while(k!=-1&&s[i-1]!=s[k])k=nxt[k];
		nxt[i]=k+1;
	}
}
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int t;
	cin>>t;
	for(; t--;) {
		long long ans=1;

		cin>>s;
		for(length=1; length<=s.length(); length++) {
			long long this_ans=0;
			getnxt();
			int k=nxt[length];
			while(k!=-1) {
				if(k<=length/2&&k!=0) {
					this_ans++;
				}
				k=nxt[k];
			}
			ans*=(this_ans+1);
			ans%=(int)1e9+7;
		}
		cout<<ans<<'\n';
	}

	return 0;
}
2023/10/3 16:30
加载中...