[BZOJ3670][Noi2014]动物园 && KMP
来源:互联网 发布:林更新 网络 编辑:程序博客网 时间:2024/04/30 11:12
不要问我为什么不从s开始读 我试了N久没试出来 然后用s+1开始读就爽爽哒
在构造fail数组之后递推构造num数组(与题目有所不同的是这里的num指的是由当前位置失匹num次后会回到1) 假设某个fail值的位置j 并且j*2 > i 说明肯定有重复的部分 继续寻找前一个fail值
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<queue>#include<set>#define SF scanf#define PF printfusing namespace std;typedef long long LL;const int MAXN = 1000000;const int MOD = 1000000007;char s[MAXN+10];int f[MAXN+10], num[MAXN+10], n, ans;void GetFail() { num[1] = 1; int fail = 0; for(int i = 2; i <= n; i++) { while(fail && s[fail+1] != s[i]) fail = f[fail]; if(s[fail+1] == s[i]) fail++; f[i] = fail; num[i] = num[fail]+1; } fail = 0; for(int i = 2; i <= n; i++) { while(fail && s[fail+1] != s[i]) fail = f[fail]; if(s[fail+1] == s[i]) fail++; while( (fail << 1) > i && fail) fail = f[fail]; ans = 1LL * ans * (num[fail]+1) % MOD; }}int main() { int _T; SF("%d", &_T); while(_T--) { ans = 1; SF("%s", s+1); n = strlen(s+1); GetFail(); PF("%d\n", ans); }}
0 0
- bzoj3670: [Noi2014]动物园 KMP
- 【KMP】[Noi2014] bzoj3670 动物园
- [BZOJ3670][Noi2014]动物园 && KMP
- [BZOJ3670]NOI2014动物园|KMP
- bzoj3670 [Noi2014]动物园 kmp
- 【bzoj3670】[Noi2014]动物园 KMP
- bzoj3670 NOI2014 动物园 kmp
- BZOJ3670(Noi2014)[动物园]--KMP
- 【bzoj3670】【NOI2014】【动物园】【kmp+dp】
- bzoj3670 noi2014动物园(kmp)
- [BZOJ3670][Noi2014]动物园(KMP)
- BZOJ3670【NOI2014】动物园(KMP变形)
- [BZOJ3670][NOI2014]动物园(KMP)
- BZOJ3670 [Noi2014]动物园 【KMP计数】
- 【BZOJ3670】[Noi2014]动物园【KMP】【fail树】
- KMP——BZOJ3670/Luogu2375 [Noi2014]动物园
- bzoj3670 [noi2014] 动物园(kmp改编)
- 【KMP,next树】BZOJ3670 [Noi2014]动物园
- 关于precision-recall曲线下降特性的探讨
- Linux shell 正则表达式(BREs,EREs,PREs)差异比较
- MATLAB读取和写入Excel文件
- Class.forName java.lang.reflect.Constructor反射调用有参构造函数和无参构造函数的方法
- CSDN-markdown编辑器的使用-备忘
- [BZOJ3670][Noi2014]动物园 && KMP
- Android手势操作
- 20150415
- 最简单的基于FFmpeg的AVDevice例子(读取摄像头)
- Jsoup 获取网络信息出现UnKnownHostException
- matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭
- 男子为蹭WIFI蹲墙角数天 被民众当贼报警
- UDP协议格式
- JS兼容性获取宽高方法