Power Strings
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 25491 | Accepted: 10694 |
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.
题目大意是给你一串字符串,然后你在里头找出最小的循环节,并输出循环次数。比如abcd,循环节就是本身,循环1次。而aaaa循环节是a,循环了4次,ababab循环节是ab,循环了3次
这道题其实暴搜直接就过了
11371876 | TSERROF | 2406 | Accepted | 4784K | 1891MS | C++ | 427B | 2013-03-20 14:07:58 |
#include<iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string s;
while (cin>>s && s!=".")
{
unsigned int n=1;
for(n=1;n<=s.size();++n)
{
if( s.size()%n ) continue;
string substr=s.substr(0,n);
string temp=substr;
for(unsigned t=1;t<s.size()/n;++t)
substr.append(temp);
if(substr==s)
break;
}
cout<<s.size()/n<<endl;
}
return 0;
}
不过貌似很慢,不过可以用kmp的思想来做,稍后补上