BZOJ[3670][Noi2014]动物园 KMP
2018-02-08 09:47
501 查看
传送门ber~
定义位置ii要花cnticnti步跳到头,那么numinumi就等于这cnticnti个编号≤i/2≤i/2有多少个
如果对于每一个编号都暴力往回跳的话,显然是很容易被卡掉的
那么再做一遍kmp限制一下长度就好了!
代码如下:
定义位置ii要花cnticnti步跳到头,那么numinumi就等于这cnticnti个编号≤i/2≤i/2有多少个
如果对于每一个编号都暴力往回跳的话,显然是很容易被卡掉的
那么再做一遍kmp限制一下长度就好了!
代码如下:
#include<cstring> #include<cstdio> #define MOD 1000000007 #define N 1000020 using namespace std; char s ; int nex ,num ,T; inline void Solve(char *s){ int len=strlen(s+1); nex[1]=0;num[1]=1; int i=2,j=0; long long ans=1; while(i<=len){ if(!j || s[i]==s[j+1]){ if(s[i]==s[j+1]) j++; nex[i]=j; num[i]=num[j]+1; i++; } else j=nex[j]; } i=2,j=0; while(i<=len){ if(!j || s[i]==s[j+1]){ if(s[i]==s[j+1]) j++; while(j*2>i) j=nex[j]; ans=ans*(num[j]+1); ans=ans%MOD; i++; } else j=nex[j]; } printf("%lld\n",ans); } int main(){ scanf("%d",&T); while(T--){ scanf("%s",s+1); Solve(s); } return 0; }
相关文章推荐
- bzoj 3670 [Noi2014]动物园【kmp】
- bzoj3670: [Noi2014]动物园 KMP
- 【bzoj3670】[Noi2014]动物园 KMP
- [NOI2014][bzoj3670] 动物园 [kmp+next数组应用]
- 【bzoj 3670】 [Noi2014]动物园 KMP变式
- BZOJ3670 [Noi2014]动物园 【KMP计数】
- bzoj3670 [noi2014] 动物园(kmp改编)
- 【bzoj3670】[Noi2014]动物园 KMP-next数组
- 【BZOJ3670】【NOI2014】动物园 [KMP][倍增]
- 【BZOJ】3670 [Noi2014]动物园 KMP
- [BZOJ3670][Noi2014]动物园 KMP
- BZOJ_3670_[NOI2014]_动物园_(kmp)
- BZOJ3670【NOI2014】动物园(KMP变形)
- 【KMP】BZOJ3670-[Noi2014]动物园
- BZOJ 3670: [Noi2014]动物园【KMP变形 】
- [省选前题目整理][BZOJ 3670][NOI 2014]动物园(KMP)
- BZOJ_3670_[Noi2014]动物园_KMP
- BZOJ 3670: [Noi2014]动物园 KMP题解
- BZOJ 3670([Noi2014]动物园-kmp变形)
- 【KMP】[Noi2014] bzoj3670 动物园