(POJ2406)Power Strings <KMP算法求最小循环节>
来源:互联网 发布:东阳司法拍卖网淘宝网 编辑:程序博客网 时间:2024/05/18 03:29
Power Strings
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
Hint
This problem has huge input, use scanf instead of cin to avoid time limit exceed.
Source
Waterloo local 2002.07.01
题意:
就是一道求s 最小循环节的题,输出循环的最大次数。
分析:
KMP算法中,f[i]数组存的是[0,i)的最长真前缀等于最长真后缀的长度。那么若前i个字符组成的前缀是循环的,那么i%(i-f[i])==0 一定成立。 错位部分就是循环节。
AC代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int maxn = 1000010;char s[maxn];int f[maxn];void getfail(char* p){ int n = strlen(p); f[0] = f[1] = 0; for(int i=1;i<n;i++) { int j = f[i]; while(j && p[i]!=p[j]) j = f[j]; f[i+1] = p[i]==p[j] ? j+1 : 0; }}int main(){ while(scanf("%s",s)!=EOF) { if(strcmp(s,".")==0) break; getfail(s); int n = strlen(s); if(f[n] > 0 && n%(n-f[n])==0) printf("%d\n",n/(n-f[n])); else printf("1\n"); } return 0;}
- (POJ2406)Power Strings <KMP算法求最小循环节>
- poj2406--Power Strings(KMP求最小循环节)
- [poj2406]Power Strings(kmp求最小循环节)
- poj2406 Power Strings(kmp求最小循环节)
- 【KMP求最小循环节】POJ2406 Power Strings
- poj2406 Power Strings(kmp求循环节)
- 【poj2406】 Power Strings (KMP求循环节)
- poj2406(KMP 求循环节的个数)Power Strings --
- POJ2406-Power Strings(kmp循环节)
- POJ2406 Power Strings(KMP,循环节)
- 【POJ2406】Power Strings(KMP与最小循环节的故事)
- POJ 2406 Power Strings(KMP求最小循环节)
- poj2406——Power Strings(KMP循环节)
- poj2406--Power Strings(kmp:求循环串的次数)
- POJ 2406 Power Strings KMP 求最小循环节
- KMP + 求最小循环节 --- POJ 2406 Power Strings
- 【poj 2406】 Power Strings 【KMP 求最小循环节】
- POJ2406 Power Strings KMP-next数组的循环节
- 利用springaop导致基于实现类注入失败的原因及解决方案
- python连接Mysql数据库字符乱码的问题
- thinkphp中session过期时间的配置
- 数据结构::模拟实现动态栈
- Linux基本命令
- (POJ2406)Power Strings <KMP算法求最小循环节>
- 事务,回滚,数据库管理Transaction
- Android studio JDK和SDK路径设置
- python以正确的宽度在居中的‘盒子’打印一个句子
- iOS 获取字符串在给定条件下的CGRect
- 复习iOS动画-Easing
- css的绝对定位
- ActiveMQ+MQTT协议 实现Android推送(根据订阅主题可实现点对点、集群推送)
- Priority Tagged