diff --git a/AcWing/141/141.cpp b/AcWing/141/141.cpp new file mode 100644 index 00000000..c29f84c9 --- /dev/null +++ b/AcWing/141/141.cpp @@ -0,0 +1,41 @@ +#include +#include + +using std::cin; +using std::cout; +const char endl = '\n'; + +const int N = 1e6 + 5; + +int t, n, next[N]; +std::string s; + +int main() { + std::ios::sync_with_stdio(false); + + while (cin >> n, n) { + cout << "Test case #" << ++t << endl; + + cin >> s; + + s = ' ' + s; + + next[1] = 0; + for (int i = 2, j = 0; i <= n; i++) { + while (j && s[i] != s[j + 1]) j = next[j]; + if (s[i] == s[j + 1]) j++; + next[i] = j; + } + + for (int i = 2; i <= n; i++) { + int len = i - next[i]; + if (i % len == 0 && i / len > 1) { + cout << i << ' ' << i / len << endl; + } + } + + cout << endl; + } + + return 0; +}