zoukankan      html  css  js  c++  java
  • POJ 2406 Power Strings(KMPnext数组的应用)

    题意:题目很短,我们先来猜一波题意,看样例我们口胡一波,可能是求一个字符串S,最多是由一个字符串复制几次得到

    思路:队里kmp都不怎么好,抽时间学一下(多谢神犇们的博客,传送门),我们了解了题意之后,我们利用kmp的next数组性质可以容易的得到一个串S的最小循环节是|S|-next[s]得到的,如果得到的循环节长度可以被|S|整出,那么我们可以得到一个最小循环节,如果不能整除,则表示我们需要增加一些字符串使其形成新的循环节

    代码:(get新技能,退役老年人手撕next数组)

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int maxn=1e6+7;
    char a[maxn];
    int next[maxn];
    int len;
    void getnext()
    {
        int j=0,k=-1;
        next[0]=-1;
        while(j<len){
            if(a[j]==a[k]||k==-1)next[++j]=++k;
            else k=next[k];
        }
    }
    int main()
    {
        while(~scanf("%s",a)){
            if(a[0]=='.')break;
            len=strlen(a);
            getnext();
            int ans=len-next[len];
            if(len%ans)puts("1");
            else{
                printf("%d
    ",len/ans);
            }
        }
        return 0;
    }
  • 相关阅读:
    203. Remove Linked List Elements
    python练习小程序
    五十音练习小软件
    CocosCreator生命游戏
    一个swift下载程序
    用excel做一幅像素画
    翻译一篇SpiderMonkey GC的文章
    unity-3d拼图游戏
    NDK编译Python2.7.5
    git命令简图
  • 原文地址:https://www.cnblogs.com/lalalatianlalu/p/9640776.html
Copyright © 2011-2022 走看看