bzoj3670: [Noi2014]动物园 KMP
2014-09-26 01:08
246 查看
kmp位置一直用一个数j来表示比较好。。。
/************************************************************** Problem: 3670 User: xujiahe Language: C++ Result: Accepted Time:684 ms Memory:10068 kb ****************************************************************/ #include <algorithm> #include <cstring> #include <cstdio> #include <iostream> #include <cmath> using namespace std; #define maxn 1001000 #define ll long long char str[maxn]; int len,next[maxn]; int cal[maxn]; void solve() { // memset(cal,0,sizeof(cal)); // memset(next,0,sizeof(next)); len=strlen(str); next[1]=0; cal[1]=1; int j=0; for(int i=1;i<len;i++) { while(j&&str[i]!=str[j]) { j=next[j]; } if(str[i]==str[j]) { j++; } next[i+1]=j; cal[i+1]=cal[j]+1; } /* for(int i=1;i<=len;i++) { printf("%d %d\n",next[i],cal[i]); } */ ll ans=1; j=0; for(int i=1;i<len;i++) { while(j&&str[j]!=str[i] ) j=next[j]; if(str[j]==str[i]) j++; while( (j<<1) > (i+1) ) j=next[j]; ans*=cal[j]+1; ans%=1000000007; } printf("%lld\n",ans); } int main() { int cas; scanf("%d",&cas); while(cas--) { scanf("%s",str); solve(); } return 0; } /* 3 aaaaa ab abcababc */
相关文章推荐
- [NOI2014][bzoj3670] 动物园 [kmp+next数组应用]
- BZOJ 3670: [Noi2014]动物园 KMP
- 【bzoj3670】【NOI2014】【动物园】【kmp+dp】
- BZOJ_3670_[NOI2014]_动物园_(kmp)
- BZOJ 3670 [Noi2014]动物园 (KMP next数组应用)
- 【BZOJ3670】【NOI2014】动物园 [KMP][倍增]
- BZOJ 3670 NOI 2014 动物园 变形KMP
- bzoj 3670: [Noi2014]动物园 KMP
- 【KMP,next树】BZOJ3670 [Noi2014]动物园
- [BZOJ3670][Noi2014]动物园 && KMP
- 【BZOJ3670】【NOI2014】动物园 KMP变形 线性出解
- BZOJ 3670: [Noi2014]动物园 [KMP]
- 【BZOJ3670】【NOI 2014】动物园(KMP)
- BZOJ 3670([Noi2014]动物园-kmp变形)
- 【bzoj3670】[Noi2014]动物园 KMP
- BZOJ_3670_[Noi2014]动物园_KMP
- [KMP next树] BZOJ 3670 [Noi2014]动物园
- BZOJ3670【NOI2014】动物园(KMP变形)
- bzoj 3670 [Noi2014]动物园【kmp】
- BZOJ3670 [Noi2014]动物园 【KMP计数】