1、UVALive 3026 Period
参考:《算法竞赛入门经典-训练指南》
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <bitset>
#include <ctime>
#include <cctype>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> Pair;
const int INF = 0x7fffffff;
const int maxn = 1e6 + 10;
int N, Case = 0;
char s[maxn];
int Next[maxn];
int main()
{
#ifdef __AiR_H
freopen("in.txt", "r", stdin);
#endif // __AiR_H_
while (scanf("%d", &N) != EOF && N != 0) {
scanf("%s", s);
Next[0] = Next[1] = 0;
for (int i = 1; i < N; ++i) {
int j = Next[i];
while (j != 0 && s[i] != s[j]) {
j = Next[j];
}
Next[i + 1] = (s[i] == s[j] ? j + 1 : 0);
}
printf("Test case #%d\n", ++Case);
for (int i = 2; i <= N; ++i) {
if (Next[i] > 0 && (i % (i - Next[i])) == 0) {
printf("%d %d\n", i, i / (i - Next[i]));
}
}
printf("\n");
}
return 0;
}