zoukankan      html  css  js  c++  java
  • BZOJ 1355: [Baltic2009]Radio Transmission

    Description

    一个字符串最短周期.

    Sol

    KMP.

    最短周期就是 (n-next[n])

    证明:

    当该字符串不存在周期的时候 (next[n]=0) 成立.

    当存在周期的时候

    (next[]) 表示的就是一个和当前后缀相等的前缀,由中间交错的位置可以分别推倒出相邻长度为 (n-next[n]) 的子串都相等.

    差不多就这样子证吧...

    Code

    /**************************************************************
        Problem: 1355
        User: BeiYu
        Language: C++
        Result: Accepted
        Time:24 ms
        Memory:6172 kb
    ****************************************************************/
     
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
     
    const int N = 1000005;
     
    int n,ans,t;
    char s[N];
    int f[N];
     
    int main(){
        scanf("%d",&n);
        scanf("%s",s+1);
        f[1]=0;
        for(int i=2,j=0;i<=n;i++){
            while(j && s[i]!=s[j+1]) j=f[j];
            if(s[i]==s[j+1]) ++j;
            f[i]=j;
        }
        //for(int i=1;i<=n;i++) cout<<f[i]<<" ";cout<<endl;
        cout<<n-f[n]<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    Exection throws和throw
    Exection(二)
    JAVA-Exception
    IDEA初见---输出HelloWorld,并打包成jar包
    Centos6.5安装Tomcat
    Centos6.5下装ZooKeeper
    LInux下装jdk
    python作业高级FTP
    tcp黏包
    计算器
  • 原文地址:https://www.cnblogs.com/beiyuoi/p/6014017.html
Copyright © 2011-2022 走看看