POJ2406Power Strings
来源:互联网 发布:淘宝二手3ds 编辑:程序博客网 时间:2024/06/09 16:21
易水人去,明月如霜。
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
abcdaaaaababab.
Sample Output
143
Hint
This problem has huge input, use scanf instead of cin to avoid time limit exceed.
大意:给出一个字符串 问它最多由多少相同的字串组成
如 abababab由4个ab组成
分析:
kmp中的next数组求最小循环节的应用
例如
ababab next[6] = 4; 即
ababab
ababab
1~4位 与2~6位是相同的
那么前两位
就等于3、4位
3、4位就等于5、6位
……
所以 如果 能整除 也就循环到最后了
如果不能整除
就最后余下的几位不在循环内
例如
1212121
1212121
最后剩余1不能等于循环节
代码:#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;char a[1000005];int d[1000005];int main(){while(1){ scanf("%s",a); if(a[0]=='.') break; int len=strlen(a); for(int i=1;i<=len;i++) d[i]=a[i-1]; int nxt[1000005]; nxt[1]=0; int j=0; for(int i=2;i<=len;i++) { if(j!=0&&d[i]!=d[j+1]) j=nxt[j]; if(d[i]==d[j+1]) j++; nxt[i]=j; } int ans=1; if(len%(len-nxt[len])==0) ans=len/(len-nxt[len]); printf("%d\n",ans);} return 0;}
0 0
- POJ2406Power Strings
- POJ2406Power Strings
- poj2406Power Strings
- poj2406Power Strings
- poj2406Power Strings
- POJ2406Power Strings
- POJ2406Power Strings KMP算法
- poj2406Power Strings(DC3)
- POJ2406Power Strings[KMP]
- poj2406Power Strings(KMP)
- poj2406Power string
- Strings
- Strings
- strings
- Strings
- Strings
- Strings
- strings
- 河南工业“玲珑杯”小天使改名
- java学习【知识点及代码11】
- 不一样的手机扫描车牌识别
- 使用adb shell 进入手机修改文件的权限
- Docker网络方案初探
- POJ2406Power Strings
- 二叉树的前序遍历
- python2.7爬取京东商品评论
- usaco5.1.1 Fencing the Cows
- ArcSoft's Office Rearrangement
- 利用predis操作redis方法大全
- F
- 约瑟夫问题
- hdu1018