WA0
查看原帖
WA0
553671
chenhaotian0219楼主2023/9/3 14:06
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
const int p=1e9+7;
int pi[N],T;
long long asdf(string s){
  int n=s.length();
  long long ans=1;
  for (int i=0;i<n;i++)    pi[i]=0;
  for (int i = 1; i < n; i++) {
    int j=pi[i-1];
    while (j>0 && s[i]!=s[j]) 
        j=pi[j-1];
    j+=(s[i]==s[j]);
    int kk=pi[i-1];
    if(s[i]==s[j]){
        while(s[i]!=s[kk]&&kk>(i+1)/2 && kk>0)
            kk=pi[kk-1];
        kk+=(s[i]==s[kk]);
        ans=ans*(kk+1)%p;
    }
    pi[i]=j;
   // cout << i<<" " << pi[i] << " " << kk<<endl;
  }
  return ans;
}
int main(){
    cin >> T;     
    while(T--){
        string kkk;
        cin >> kkk;
        cout << asdf(kkk) << endl;
    }
}
2023/9/3 14:06
加载中...