KMP
来源:互联网 发布:制衣打飞软件 编辑:程序博客网 时间:2024/06/08 16:53
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;}
0 0