• KMP + 求最小循环节 --- HDU 1358 Period


    Period 

    Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=1358


     

    Mean: 

    给你一个字符串,让你从第二个字符开始判断当前长度的字符串是否是重复串,如果是,输出当前位置,并输出重复串的周期。

    analyse:

    还是next数组的运用,详见上一篇博客。

    Time complexity: O(N)

     

    Source code: 

    /*
    * this code is made by crazyacking
    * Verdict: Accepted
    * Submission Date: 2015-07-28-07.12
    * Time: 0MS
    * Memory: 137KB
    */
    #include <queue>
    #include <cstdio>
    #include <set>
    #include <string>
    #include <stack>
    #include <cmath>
    #include <climits>
    #include <map>
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    #define  LL long long
    #define  ULL unsigned long long
    using namespace std;
    const int MAXN=1000010;
    int n;
    char s[MAXN];
    int Next[MAXN];
    void getNext()
    {
         Next[0]=0;
         for(int i=1,k=0;i<n;++i)
         {
               while(s[i]!=s[k]&&k) k=Next[k-1];
               if(s[i]==s[k]) ++k;
               Next[i]=k;
         }
    }
    int main()
    {
         ios_base::sync_with_stdio(false);
         cin.tie(0);
         int cas=1;
         while(~scanf("%d",&n)&&n)
         {
               scanf("%s",s);
               getNext();
               printf("Test case #%d ",cas++);
               for(int i=1;i<n;++i)
               {
                     int now_cycle=(i+1)-Next[i];
                     if((now_cycle!=i+1) && (i+1)%now_cycle==0)
                     {
                           printf("%d %d ",i+1,(i+1)/now_cycle);
                     }
               }
               puts("");
         }
         return 0;
    }
    /*

    */
  • 相关阅读:
    windows 程序设计自学:窗口正中显示Hello,World
    为网站图片增加延迟加载功能,提升用户体验
    线性表顺序存储
    sys.stdout sys.stderr的用法
    python 跳出嵌套循环方法
    * 与 ** 在调用函数时的作用
    twisted 学习笔记二:创建一个简单TCP客户端
    给命令行上色
    __new__ 的简单应用
    网友对twisted deferr的理解
  • 原文地址:https://www.cnblogs.com/crazyacking/p/4681728.html
Copyright © 2020-2023  润新知