poj--2406
2015-09-19 22:01
197 查看
Power Strings
Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 38544 Accepted: 16001
Description
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the
empty string) and a^(n+1) = a*(a^n).
Input
Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.
Output
For each s you should print the largest n such that s = a^n for some string a.
Sample Input
abcd
aaaa
ababab
.
Sample Output
1
4
3
题目来源:http://poj.org/problem?id=2406
考查点:Kmp中next数组的应用
参考资料:http://www.cnblogs.com/jackge/archive/2013/01/05/2846006.html
代码如下:
Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 38544 Accepted: 16001
Description
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the
empty string) and a^(n+1) = a*(a^n).
Input
Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.
Output
For each s you should print the largest n such that s = a^n for some string a.
Sample Input
abcd
aaaa
ababab
.
Sample Output
1
4
3
题目来源:http://poj.org/problem?id=2406
考查点:Kmp中next数组的应用
参考资料:http://www.cnblogs.com/jackge/archive/2013/01/05/2846006.html
代码如下:
#include<stdio.h> #include<string.h> char a[1000010]; int per[1000010]; int b[1000010]; int l; void getp() { int i,j; j=-1;i=0; per[i]=-1; while(i<l) { if(j==-1||a[i]==a[j]) { i++; j++; per[i]=j; } else j=per[j]; } } int main() { while(scanf("%s",a)) { if(strcmp(a,".")==0)break; l=strlen(a); memset(per,0,sizeof(per)); getp(); if(l%(l-per[l])==0) printf("%d\n",l/(l-per[l])); else printf("1\n"); } return 0; }
相关文章推荐
- fragment 事务回滚 ---动态创建fragment
- U盾原理研究
- (转载)Sumblime Text 2 常用插件以及安装方法
- HTML5学习之工具使用
- Jesus Is Here(2015年吉林网络赛)
- 2016乐视校园招聘笔试题回忆版
- 【Android小游戏】安卓小游戏开发(直播手把手系列二)
- 笔试题_switch语句里default位置与执行问题
- wamp Could not execute menu item和 HTTP Error 404. The requested resource is not found.
- Android核心基础-10.通知
- 打开Voice Over时,CATextLayer的string对象兼容NSString和NSAttributedString导致的Crash(二解决思路3)
- hdu5455 Fang Fang(沈阳网赛)
- int *p()与int (*p)()的区别
- 内存泄漏,内存溢出
- spring4整合hibernate5报错解决
- 使用自定义Session监听器实现自定义Session管理
- LintCode 最长公共前缀
- 表单验证
- NOIP2013-普及组初赛C语言解析
- 指针和指针的引用作为参数——c++