• 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;
    }
    

      

  • 相关阅读:
    Es索引优化
    Echarts-JAVA
    黑客容易攻击的端口
    基于流数据挖掘的网络流量异常检测及分析研究
    大数据可视化分析-绿盟
    Cron
    spring mvc 使用及json 日期转换解决方案
    PIXLCLOUND
    Moloch
    MySQL JDBC的setFetchSize
  • 原文地址:https://www.cnblogs.com/beiyuoi/p/6014017.html
Copyright © 2020-2023  润新知