[POJ
来源:互联网 发布:软件算无形资产吗 编辑:程序博客网 时间:2024/06/08 08:48
Link:http://poj.org/problem?id=2406
Power Strings
Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 50548 Accepted: 21083
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]
Code:
#include<cstdio>#include<cstdlib>#include<algorithm>#include<iostream>#include<cmath>#include<cstring>#include<queue>#include<stack>using namespace std;const int maxn=1e6+10;char s[maxn];int next[maxn];void getnext(char *s,int m){int i=0,j=0;next[0]=-1,j=next[i];while(i<m){if(j==-1||s[i]==s[j])next[++i]=++j;elsej=next[j];}}int main(){while(~scanf("%s",s),s[0]!='.'){int l=strlen(s);getnext(s,l);int a=l-next[l];if(l%a==0)printf("%d\n",l/a);elseprintf("1\n");}return 0;}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- JAVA线程池(ThreadPoolExecutor)原理分析与使用
- 一周搞定9轴MPU9250(无华)(3)--数据采集
- C#WindowsMediaPlayer的播放模式实现(单曲循环、列表循环、随机播放)
- let's shell---tcpdump命令使用参数详解
- jquery省份两级联动
- [POJ
- A Magic Lamp(HDU-3183)(RMQ 与 贪心)
- Spark SQL 之 Join 实现
- 搭建个人vpn:vps+shadowsocks
- 软碟通UltraISO 9.65.3237 【官方版+ 注册码】
- 《大型分布式网站架构设计与实践》——常见的Web攻击手段
- 视频质量分析系统VC
- HDU 6127 Hard challenge (几何)
- hadoop 二次排序join的实现