本文共 1170 字,大约阅读时间需要 3 分钟。
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 41658 Accepted: 17323 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. SourceWaterloo local 2002.07.01
解题思路:找出循环节 用总长度除一下得出循环次数 如果除不尽说明循环一次
#include#include #include using namespace std;int nexta[4000100];void getnext(string n){ int i=0,j=-1; nexta[0]=-1; while(i >n&&n!=".") { getnext(n); i=n.size(); k=i-nexta[i];//循环节 if(i%k==0) { cout<
转载地址:http://ptfci.baihongyu.com/