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

luogu
题目就是用KMP板子前半部分求next[n],结果为n-next[n]。
至于为什么,画个分析,结合题目复制串的事实,推一下即可?
附一个KMP板子

#include<bits/stdc++.h>
using namespace std;
int n,next[1000010];
char c[1000010];
int main()
{
	scanf("%d%s",&n,c+1);
	for(int i=2;i<=n;i++)
	{
		int j=next[i-1];
		while(j>0&&c[i]!=c[j+1])
		{
			j=next[j];
		}
		if(c[i]==c[j+1])
		{
			next[i]=j+1;
		}
		else
		{
			next[i]=0;
		}
	}
	cout<<n-next[n];
} 
posted @ 2019-05-24 15:22  G_A_TS  阅读(538)  评论(0编辑  收藏  举报