标签:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 1e6+7; int s[maxn];//文本串 char p[2000010];//匹配串 int next[2000010];//匹配串的next数组 void GetNext(int n) { int pLen = n; next[0] = -1; int k = -1; int j = 0; while (j < pLen)//坑点啊,模板是只求出了next[n-1],但是这题需要求next[n]。。。。。!! { //p[k]表示前缀,p[j]表示后缀 if (k == -1 || p[j] == p[k]) { ++k; ++j; next[j] = k; } else { k = next[k]; } } } int main() { #ifdef xxz freopen("in.txt","r",stdin); #endif // xxz int Case; cin>>Case; while(Case--) { int n,m; cin>>n; cin>>p; int ans = 0; GetNext(n); for(int i = 1; i <= n; i++) { if(next[i] > 0) ans++; if(ans >= 10007) ans %= 10007; } ans += n; ans %= 10007; cout<<ans<<endl; } return 0; }
标签:
原文地址:http://blog.csdn.net/u013445530/article/details/42394403