zoukankan      html  css  js  c++  java
  • Bzoj 1355: [Baltic2009]Radio Transmission(kmp)

    1355: [Baltic2009]Radio Transmission
    Time Limit: 10 Sec Memory Limit: 64 MB
    Description
    给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.
    Input
    第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组成.
    Output
    输出最短的长度
    Sample Input
    8
    cabcabca
    Sample Output
    3
    HINT
    对于样例,我们可以利用”abc”不断自我连接得到”abcabcabc”,读入的cabcabca,是它的子串

    /*
    kmp.
    找循环节n-next[n].
    只能感性的认识.
    先记住吧. 
    不会证明orz.
    */
    #include<iostream>
    #include<cstdio>
    #define MAXN 1000001
    using namespace std;
    int l1,ans,next[MAXN];
    char s[MAXN];
    int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
        return x*f;
    }
    void kmp()
    {
        int p=0;
        for(int i=2;i<=l1;i++)
        {
            while(p&&s[i]!=s[p+1]) p=next[p];
            if(s[i]==s[p+1]) p++;
            next[i]=p;
        }
        printf("%d",l1-next[l1]);
    }
    int main()
    {
        scanf("%d",&l1);
        scanf("%s",s+1);
        kmp();
        return 0;
    }
  • 相关阅读:
    python学习中的bug
    python爬虫工具
    Win系统的快捷键和Macos系统的快捷键
    java基础编程
    linux下的ssh和rynsc
    我为什么要搞无人驾驶
    无人驾驶用到哪些具体技术
    java生成excel,word文件
    java后端实习,从最简单的crud做起
    开发经验和习惯
  • 原文地址:https://www.cnblogs.com/nancheng58/p/10068101.html
Copyright © 2011-2022 走看看