【题解】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;
}
posted @ 2018-11-18 20:54  JSOI爆零珂学家yzhang  阅读(250)  评论(0编辑  收藏  举报