问题重述:
输入一个长度为l的字符串S,求所有S的由字串重复排列而成的前缀,并输出前缀的长度以及该前缀的最大重复度。
AC代码:
//Memory: 5700K Time: 641MS #include <iostream> #include <cstring> #include <string> using namespace std; ; int prefix[maxn]; string s; void init() { int l = s.size(); memset(prefix, , sizeof(prefix)); ; ; i <= l; i++) { && s[k] != s[i - ]) k = prefix[k]; ]) k++; prefix[i] = k; } } int main() { int n; ; while (cin >> n && n) { cin >> s; init(); int l = s.size(); cout << "Test case #" << case_num++ << endl; ; k <= l; k++) { && k % (k - prefix[k]) == ) { cout << k << " " << k / (k - prefix[k]) << endl; } } cout << endl; } ; }