9
22
2015
0

1355: [Baltic2009]Radio Transmission

1355: [Baltic2009]Radio Transmission

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 465  Solved: 301
[Submit][Status][Discuss]

Description

给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.

Input

第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组成.

Output

输出最短的长度

Sample Input

8
cabcabca

Sample Output

3

HINT

对于样例,我们可以利用"abc"不断自我连接得到"abcabcabc",读入的cabcabca,是它的子串

Source

   很经典(水)的题。。。利用next数组的性质直接可以得出答案为n-next[n]。。。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s[1000010];
int next[1000010],n;
void getnext(){
	for (int i=2,j=0;i<=n;i++){
		while (s[j+1]!=s[i] && j>0) j = next[j];
		if (s[j+1]==s[i]) j++;
		next[i] = j;
	}
}
int main(){
	scanf("%d",&n);
	scanf("%s",s+1);
	getnext();
	printf("%d",n-next[n]);
}
Category: BZOJ题解 | Tags: | Read Count: 345

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com