HDU 3746 Cyclic Nacklace——kmp

来源:互联网 发布:知乎电子指纹锁品牌 编辑:程序博客网 时间:2024/06/06 17:30

设最小循环节为len,则需要补充的长度为len-n%len,特殊情况特殊考虑

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e5 + 10;char P[maxn];int t, n, fail[maxn];void Getfail() {    fail[0] = 0;    for (int i = 1, j = 0; i < n; i++) {        while (j && P[i] != P[j]) j = fail[j - 1];        if (P[i] == P[j]) j++;        fail[i] = j;    }}int main() {    scanf("%d", &t);    for (int kase = 1; kase <= t; kase++) {        scanf("%s", P); n = strlen(P);        Getfail();        int len = n - fail[n - 1];        if (len == n) printf("%d\n", n);        else {            if (n % len) {                printf("%d\n", len - n % len);            }            else printf("0\n");        }    }    return 0;}


原创粉丝点击