洛谷P4391 [BOI2009]Radio Transmission 无线传输

https://www.luogu.org/problemnew/show/P4391

题目描述

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

输入输出格式

输入格式:

 

第一行给出字符串的长度,1 < L ≤ 1,000,000.

第二行给出一个字符串,全由小写字母组成.

 

输出格式:

 

输出最短的长度

 

输入输出样例

输入样例#1: 复制
8
cabcabca
输出样例#1: 复制
3

说明

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

 

#include <iostream>

using namespace std;
const int maxn = 1e6+10;
char a[maxn];
int ne[maxn];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    cin >> a+1;
    for(int i=2,j=0;i<=n;i++)
    {
        while(j&&a[i]!=a[j+1]) j=ne[j];
        if(a[i]==a[j+1]) j++;
        ne[i]=j;
    }
    cout << n-ne[n] << endl;
    return 0;
}

 

上一篇:【KMP】Radio Transmission


下一篇:Python3.5爬取cbooo.cn数据并且同步到mysql中