BZOJ3670(Noi2014)[动物园]--KMP
2017-12-02 10:44
281 查看
【链接】
bzoj3670
【解题报告】
好像题目自己说是KMP。。。
就只需要判断一下失配指针的位置是否超过长度一半就行了。
bzoj3670
【解题报告】
好像题目自己说是KMP。。。
就只需要判断一下失配指针的位置是否超过长度一半就行了。
#include<cstdio> #define LL long long using namespace std; const int maxn=1000005,tt=1000000007; int T,len,a[maxn],p[maxn]; LL ans; char s[maxn]; void Readc() { char ch=getchar(); len=0; while (ch<'a'||ch>'z') ch=getchar(); while (ch>='a'&&ch<='z') s[++len]=ch,ch=getchar(); } void Work() { Readc(); ans=1; p[0]=p[1]=a[0]=0; a[1]=1; for (int i=2,k1=0,k2=0; i<=len; i++) { while (k1&&s[k1+1]!=s[i]) k1=p[k1]; if (s[k1+1]==s[i]) k1++; p[i]=k1; a[i]=a[k1]+1; while (k2&&s[k2+1]!=s[i]) k2=p[k2]; if (s[k2+1]==s[i]) k2++; while (k2>(i>>1)) k2=p[k2]; ans=(LL)ans*(a[k2]+1)%tt; } printf("%d\n",ans); } int main() { freopen("3670.in","r",stdin); freopen("3670.out","w",stdout); scanf("%d",&T); while (T--) Work(); return 0; }
相关文章推荐
- BZOJ3670 [Noi2014]动物园 解题报告【字符串】【KMP】
- [KMP fail树] BZOJ3670: [Noi2014]动物园
- bzoj3670 [Noi2014]动物园 kmp
- BZOJ 3670 [Noi2014]动物园 (KMP)
- BZOJ 3670: [Noi2014]动物园【KMP变形 】
- BZOJ 3670 [Noi2014]动物园 (KMP next数组应用)
- BZOJ3670: [Noi2014]动物园
- uoj #5. 【NOI2014】动物园 kmp
- BZOJ[3670][Noi2014]动物园 KMP
- bzoj3670【NOI2014】动物园
- BZOJ 3670: [Noi2014]动物园(kmp+递推)
- [BZOJ3670][Noi2014]动物园 && KMP
- 【KMP】BZOJ3670-[Noi2014]动物园
- bzoj 3670: [Noi2014]动物园 kmp与扩展kmp
- jzoj3756【NOI2014】动物园(kmp)
- BZOJ 3670: [Noi2014]动物园 KMP题解
- BZOJ3670【NOI2014】动物园(KMP变形)
- 【NOI2014T4】动物园-变形KMP
- BZOJ3670: [Noi2014]动物园(洛谷P2375)
- 【bzoj3670】【NOI2014】【动物园】【kmp+dp】