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