【题解】Luogu P4391 [BOI2009]Radio Transmission 无线传输

原题传送门

这题需要用到kmp匹配

推导发现:

设循环节的长度为x,那么kmp数组前x个都是0,后面kmp[x+n]=n

先求出kmp数组

答案实际就是len-kmp[len]

#include <bits/stdc++.h>
#define N 1000005
using namespace std;
char a[N];
int kmp[N];
int main()
{
    int n;
    scanf("%d%s",&n,a);
    kmp[0]=kmp[1]=0;
    for(register int i=1,k=0;i<n;++i)
    {
        while(k&&a[i]!=a[k])
            k=kmp[k];
        kmp[i+1]=a[i]==a[k]?++k:0;
    }
    printf("%d",n-kmp[n]);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/yzhang-rp-inf/p/9979375.html
今日推荐