poj 2406 Power Strings(KMP)
来源:互联网 发布:欧洲旅游价格知乎 编辑:程序博客网 时间:2024/05/29 10:42
Power Strings(pku 2406)
给定两个字符串 a和b,我们定义 a*b为两个字符串的联接。例如,a = "abc" 且 b = "def",则a*b = "abcdef"。把这个定义的运算看做多项式,则一个字符串的非负整数次幂定义如下: a^0 = "" (一个空字符串) 且 a^(n+1) = a*(a^n)。
输入:
每个测试样例为一行,即一个字符串s,其长度至少为1且不超过1000000。以句号“.”为最后一组测试样例。
输出:
对于每个给出的字符串s,你应该输出最大的n使得 s = a^n等于某个字符串 a。
输入样例:
abcd
aaaa
ababab
.
输出样例:
1
4
3
分析:
题目意思是对于给定的字符串s,找到其最短子串a,满足重复子串a可以得到字符串s。那么这个最短子串是s[next[len]]s[next[len]+1]...s[len-1]。当len%(len-next[len])==0时,说明字符串s有满足条件的不是它本身的子串,len/(len-next[len])即为所求最大的n。当len%(len-next[len])!=0时,字符串s除了它本身没有满足条件的子串,故n=1。
代码:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int next[1000005];int len;int get_next(char *p){ next[0] = -1; int i = 0, j = -1; while(i <= len) { while(j == -1 || (i < len && p[i] == p[j]) ) { i++; j++; next[i] = j; } j = next[j]; } return 0;}int main(){ char a[1000005]; while(scanf("%s", a) != EOF && strcmp(a,".") != 0) { len = strlen(a); get_next(a); if(len % (len - next[len]) == 0) printf("%d\n", len / (len - next[len])); else printf("1\n"); } return 0;}
0 0
- poj 2406:Power Strings(KMP)
- poj 2406 Power Strings(kmp算法)
- POJ 2406 Power Strings(kmp)
- POJ 题目2406 Power Strings(KMP)
- POJ 2406 Power Strings(kmp)
- poj 2406 Power Strings (KMp)
- POJ 2406 Power Strings (KMP)
- POJ 2406 Power Strings(KMP)
- poj-2406-Power Strings(KMP)
- poj 2406 Power Strings(kmp)
- poj 2406Power Strings(KMP入门)
- poj 2406 Power Strings(KMP || 暴力)
- poj 2406 Power Strings(KMP)
- POJ 2406 Power Strings(KMP)
- 【POJ】2406 - Power Strings(KMP)
- POJ 2406 Power Strings(KMP)
- poj 2406 Power Strings-字符串(kmp)
- poj 2406 Power Strings(KMP)
- PHP读取XML文件的方法
- 直接用socket实现HTTP协议(下载专用)
- caffe学习笔记12-建立自己的数据集与均值计算
- 异步网页采集利器CasperJs
- 2017.2.27-2017.3.5 第一个星期 header 直接生成xls导出
- poj 2406 Power Strings(KMP)
- 从 JVM 内存模型谈线程安全
- 正确重写equals()和hashCode()方法
- Linux入门(1)
- __blk_run_queue
- 小白用eclipse创建一个maven+web3.0+JDK1.7+tomcat7.0的web项目
- 分治求逆序数
- 四十年前的 6502 CPU 指令翻译成 JS 代码会是怎样
- Hibernate延迟加载机制详解