zoukankan      html  css  js  c++  java
  • KMP + 求最小循环节 --- POJ 2406 Power Strings

     Power Strings

    Problem's Link:  http://poj.org/problem?id=2406


     

    Mean: 

    给你一个字符串,让你求这个字符串最多能够被表示成最小循环节重复多少次得到。

    analyse:

    KMP之next数组的运用。裸的求最小循环节。

    Time complexity: O(N)

     

    Source code: 

    /*
    * this code is made by crazyacking
    * Verdict: Accepted
    * Submission Date: 2015-07-28-08.23
    * 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;
    char s[MAXN];
    int Next[MAXN];
    void getNext(int len)
    {
         Next[0]=0;
         for(int i=1,k=0;i<len;++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);
         while(~scanf("%s",s) && s[0]!='.')
         {
               int len=strlen(s);
               getNext(len);
               int min_cycle=len-Next[len-1];
               if(len%min_cycle!=0) printf("1 ");
               else printf("%d ",len/min_cycle);
         }
         return 0;
    }
    /*

    */
  • 相关阅读:
    第十六周个人作业
    小组作业
    第十五周个人作业
    本周个人总结
    产品计划会议
    本周个人总结
    排球计分程序
    JProfiler入门
    (转)MMOGS服务器架构设计
    (转)游戏服务器开发需要学习的技术
  • 原文地址:https://www.cnblogs.com/crazyacking/p/4681763.html
Copyright © 2011-2022 走看看