Power Strings----poj2406(kmp扩展 循环节)
2015-09-23 20:00
330 查看
题目链接:http://poj.org/problem?id=2406
题意:就是求串s能够最多由多少个相同的串a串联而成;
例如 ababab 由3个ab串联而成;
abababa 只能由1个abababa组成;
kmp中的Next
(下标从0开始)表示n个元素的前缀和后缀的最大匹配;
a b a b a b a b
0 1 2 3 4 5 6 7
0-5和2-7是最大匹配Next【n】= 6;ab就是循环节(因为n/(n-next
)是整数,所以是循环节)即 n - Next【n】;
View Code
题意:就是求串s能够最多由多少个相同的串a串联而成;
例如 ababab 由3个ab串联而成;
abababa 只能由1个abababa组成;
kmp中的Next
(下标从0开始)表示n个元素的前缀和后缀的最大匹配;
a b a b a b a b
0 1 2 3 4 5 6 7
0-5和2-7是最大匹配Next【n】= 6;ab就是循环节(因为n/(n-next
)是整数,所以是循环节)即 n - Next【n】;
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; #define N 1000010 char s ; int Next , n; void Getnext() { int i = 0, j = -1; Next[0] = -1; while(i<n) { if(j==-1 || s[i] == s[j]) Next[++i] = ++j; else j=Next[j]; } } int main() { while(scanf("%s", s),s[0]!='.') { n = strlen(s); Getnext(); int ans = n-Next ; if(n%ans!=0) ans = 1; else ans = n/ans; printf("%d\n", ans); } return 0; } /* aabaabaa 1 */
View Code
相关文章推荐
- oom-killer
- Bootstrap Table的例子(转载)
- 【JavaScript】Html form 提交表单方式
- 第三方框架
- OS X的文本编辑快捷键
- WEB 容器、WEB服务和应用服务器的区别与联系
- 今后要注意的几点
- 【bzoj2957】【楼房重建】【线段树+dp】
- Android开机启动扫描SD卡apk流程
- Codeforces Round #321 (Div. 2)B. Kefa and Company
- 构建二叉树、二叉树的深度、广度优先遍历
- Investigating Your RAM Usage(一)
- git push冲突解决
- 要注意的基础知识!
- C# datatable中重复数据去重
- win8+VS2008"fatal error LNK1181: 无法打开输入文件“GxIAPI.lib"
- C# datatable中重复数据去重
- hdu3669 Cross the Wall
- 【codevs1425】最小的N个和,如何像煞笔一样地写堆
- hdu 3501