[NOI2014]动物园
来源:互联网 发布:中国国际贸易数据库 编辑:程序博客网 时间:2024/04/29 06:06
KMP好题
首先考虑那些可以成为前缀+后缀的子串(不考虑重叠)
发现从i跳到Next[i]时就找到一个子串
再考虑重叠问题,向前跳的过程中i在不断缩小,于是从i<<1 <= 当前长度起前面都是合法串
O(n)扫两遍
Code:
#include <cstdio>#include <cstring>#define N 1000001#define MOD 1000000007using namespace std;struct String{char c[N], ch;int p[N], l, i, j, num[N];inline void Init(){memset(p, 0, sizeof(p));memset(num, 0, sizeof(num));l = 0;for (ch = getchar();ch != '\n'; ch = getchar())c[++l] = ch;}inline void Next(){p[1] = j = 0;num[1] = 1;for (i = 2;i <= l; ++i){while (j && c[i] != c[j+1])j = p[j];p[i] = j += (c[i] == c[j+1]);num[i] = num[j] + 1;} }inline void Debug(){j = 0;int res(1);for (i = 2;i <= l; ++i){while (j && c[i] != c[j+1])j = p[j];j += (c[i] == c[j+1]);while ((j << 1) > i)j = p[j];res = (long long)((long long)res * (long long)(num[j]+1)) % MOD;}printf("%d\n", res);}}B;int main(){int T;scanf("%d ", &T);while (T--){B.Init();B.Next();B.Debug();}return 0;}
0 0
- 【NOI2014】动物园
- [NOI2014]动物园
- NOI2014 动物园
- 【NOI2014】动物园
- BZOJ3670 [Noi2014]动物园
- bzoj3670: [Noi2014]动物园 KMP
- bzoj 3670 [Noi2014]动物园
- 【KMP】[Noi2014] bzoj3670 动物园
- bzoj 3670: [Noi2014]动物园
- [BZOJ3670][Noi2014]动物园 && KMP
- [BZOJ3670]NOI2014动物园|KMP
- [BZOJ3670][Noi2014]动物园
- bzoj3670 [Noi2014]动物园 kmp
- [BZOJ3670] [Noi2014]动物园
- bzoj3670:NOI2014 动物园
- 【bzoj3670】[Noi2014]动物园 KMP
- BZOJ3670: [Noi2014]动物园
- 3670: [Noi2014]动物园
- JSLite实现 js数组数据交集$.intersect
- JSLite 与jQuery有着类似的api,模仿jQuery的语法规范,并不是100%的覆盖【官方文档】
- Linux查找并杀死僵尸进程
- 【Cocos2d-x】从C++过渡到Lua
- 最大子序列和的问题
- [NOI2014]动物园
- iOS开发者账号申请步骤
- C# asp.net 搭建微信公众平台(可实现关注消息与消息自动回复)
- 卵巢囊肿还能怀孕吗
- js模块化例子
- JAVA进程高CPU占用故障排查
- label自动换行
- 常用排序算法的时间和空间复杂度及算法时间复杂度的简单计算
- JAVA实现快速排序(非递归)