Power Strings
Posted yfr2zaz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Power Strings相关的知识,希望对你有一定的参考价值。
问题 D: 4.5.17 Power Strings
时间限制: 3 Sec 内存限制: 64 MB提交: 2995 解决: 921
[提交][状态][讨论版]
题目描述
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).
输入
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.
输出
For each s you should print the largest n such that s = a^n for some string a.
样例输入
abcd
aaaa
ababab
.
样例输出
1
4
3
思路:
找到最小的重复序列
kmp中的next数组就是这个作用
#include <cstdio> #include <iostream> #include <algorithm> #include <string.h> using namespace std; int pext[1000000] = -5; char s[1000000]; int len1; void get_next(char *T,int *next) int k = -1; int j = 0; pext[j] = k; while(j < len1) if((k == -1) || (T[j] == T[k])) k++; j++; pext[j] = k; else k = pext[k]; int main() while(1) scanf("%s",s); if(strcmp(s,".") == 0) return 0; else int sum = 0; len1 = strlen(s); get_next(s,pext); int z; z = len1 - pext[len1]; if(len1 % z ==0) for(int i=1;i<=len1;i++) if(i%z==0) sum++; printf("%d\n",sum); else printf("1\n"); return 0;
以上是关于Power Strings的主要内容,如果未能解决你的问题,请参考以下文章