libreoj10045
原题来自:BalticOI 2009
给你一个字符串,它是由某个字符串不断自我连接形成的。但是这个字符串是不确定的,现在只想知道它的最短长度是多少。
输入格式
第一行给出字符串的长度 ,第二行给出一个字符串,全由小写字母组成。
输出格式
输出最短的长度。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL maxn=1e6+10;
const LL mod=911451407;
char s[maxn];
int nxt[maxn];
int n;
void getnext()
{
int i=1,j=0;
nxt[1]=0;
while(i<=n+1){
if(j==0||s[i]==s[j]){
i++;
j++;
nxt[i]=j;
}
else{
j=nxt[j];
}
}
}
/*
*/
int main()
{
scanf("%d",&n);
scanf("%s",s+1);
getnext();
/*for(int i=1;i<=n+1;i++){
printf("%d ",nxt[i]);
}
printf("\n");
*/
printf("%d\n",n-nxt[n+1]+1);
return 0;
}