poj 2406 Power Strings(KMP求循环次数)
来源:互联网 发布:android ios js 统一 编辑:程序博客网 时间:2024/05/21 10:24
题目链接:http://poj.org/problem?id=2406
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.
Source
Waterloo local 2002.07.01
题意:
求最小子串的循环次数;
思路:(转)
KMP,next[]表示模式串如果第i位(设str[0]为第0位)与文本串第j位不匹配则要回到第next[i]位继续与文本串第j位匹配。则模式串第1位到next[n]与模式串第n-next[n]位到n位是匹配的。所以思路和上面一样,如果n%(n-next[n])==0,则存在重复连续子串,长度为n-next[n]。
例如:a b a b a b
next:-1 0 0 1 2 3 4
next[n]==4,代表着,前缀abab与后缀abab相等的最长长度,这说明,ab这两个字母为一个循环节,长度=n-next[n];
代码如下:
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;#define MAXN 1000017int next[MAXN];int len;void getnext( char T[]){ int i = 0, j = -1; next[0] = -1; while(i < len) { if(j == -1 || T[i] == T[j]) { i++,j++; next[i] = j; } else j = next[j]; }}int main(){ char ss[MAXN]; int length; while(~scanf("%s",ss)) { if(ss[0] == '.') break; len = strlen(ss); getnext(ss); length = len - next[len]; if(len%length == 0) printf("%d\n",len/length); else printf("1\n"); } return 0;}
1 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 2406Power Strings kmp算法求循环节
- POJ 2406 Power Strings (kmp求循环节)
- KMP + 求最小循环节 --- POJ 2406 Power Strings
- 【poj 2406】 Power Strings 【KMP 求最小循环节】
- POJ-2406 Power Strings(KMP求重复子串出现的最大次数)
- poj2406--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循环节】
- g++基本知识汇总
- JS闭包
- CreateEvent的用法
- 修改Linux控制台(console)的显示信息。
- getopt()和getopt_long()函数参数分析
- poj 2406 Power Strings(KMP求循环次数)
- 关于Eclipse中启动wildfly超时报错的问题
- 横屏下UIWindow添加多个view自动旋转的解决方案
- Android自定义Dialog
- Java CyclicBarrier
- g++多文件编译,并实现makefile
- URL短地址压缩算法
- HTTP请求和响应格式
- asp.net前台页面读取配置文件