您的位置:首页 > 其它

洛谷2375 NOI2014 动物园

2017-12-26 13:07 211 查看
题目:动物园

思路:kmp。

代码:#include <cstdio>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <cstring>
#include <map>
using namespace std;

#define maxn 1000000
#define MOD 1000000007

char a[maxn+5];
int num[maxn+5];
int nxt[maxn+5];

int main() {

int T;
scanf("%d",&T);
while(T--) {
scanf("%s",a);
int n=strlen(a);

memset(num,0,sizeof(num));
nxt[0]=-1;
for(int i=0; i<n; i++) {
int j=nxt[i];
while(j>=0&&a[j]!=a[i]) {
j=nxt[j];
}
nxt[i+1]=++j;
num[i+1]=num[j]+1;
}

int i=0,j=0;
long long s=1;
while(i<n) {
while (j!=-1&&a[j]!=a[i]) {
j=nxt[j];
}
j++;
while(j*2>i+1) {
j=nxt[j];
}
s=s*(num[j]+1)%MOD;
i++;
}

printf("%lld\n",s);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kmp