洛谷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。
代码:#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;
}
相关文章推荐
- BZOJ3670 & 洛谷2375 & UOJ5:[NOI2014]动物园——题解
- 【KMP】洛谷P2375 [NOI2014]动物园 题解
- [KMP fail树] BZOJ3670: [Noi2014]动物园
- [BZOJ3670][NOI2014]动物园(KMP)
- BZOJ 3670 NOI2014 动物园 KMP算法
- 【NOI2014】动物园
- bzoj3670: [Noi2014]动物园 KMP
- UOJ #5 [NOI2014 D2T1] 动物园
- 【BZOJ3670】【UOJ5】【NOI2014】动物园
- 【NOI 2014】【BZOJ 3670】动物园 题解&代码(C++)
- 3670: [Noi2014]动物园
- [NOI2014]动物园(kmp+递推)
- BZOJ3670: [Noi2014]动物园
- BZOJ3670 [Noi2014]动物园 【KMP计数】
- BZOJ 3670: [Noi2014]动物园(kmp+递推)
- [NOI2014]动物园
- BZOJ 3670: [Noi2014]动物园&&51nod 1277 字符串中的最大值
- 洛谷 P2114 [NOI2014 D1T1] 起床困难综合症 [bitset做法]
- bzoj 3670 [Noi2014]动物园
- BZOJ 3670: [Noi2014]动物园 [KMP]