HDU 2594 Simpsons’ Hidden Talents——kmp

来源:互联网 发布:pdg文件在mac 编辑:程序博客网 时间:2024/06/02 03:38
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 5 * 1e4 + 10;char s1[maxn], s2[maxn];int n, m, ans, fail[maxn];void Getfail() {    fail[0] = 0;    for (int i = 1, j = 0; i < n; i++) {        while (j && s1[i] != s1[j]) j = fail[j - 1];        if (s1[i] == s1[j]) j++;        fail[i] = j;    }}int kmp() {    Getfail();    for (int i = 0, j = 0; i < m; i++) {        while (j && s2[i] != s1[j]) j = fail[j - 1];        if (s2[i] == s1[j]) j++;        if (i == m - 1) return j;    }}int main() {    while (~scanf("%s", s1)) {        scanf("%s", s2);        ans = 0;        n = strlen(s1), m = strlen(s2);        int len = kmp();        if (len == 0) printf("0\n");        else {            s1[len] = '\0';            printf("%s %d\n", s1, len);        }    }    return 0;}