zoukankan      html  css  js  c++  java
  • hdu 1358 Period

    这个题是一个好题,题意比较简单,我就不赘述了。能让你对kmp的认识更近一步吧。我以前对kmp的理解仅限于动态规划或者前后缀之类的层次上。自己浅薄。

    ac代码:

    View Code
    #include <algorithm>
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    
    using namespace std;
    
    const int maxn=1000000+5;
    
    char s[maxn];
    int n,next[maxn],ncas;
    
    void init()
    {
        memset(s,0,(n+5)*sizeof(char));
    }
    
    void data_in()
    {
        scanf("%s",s);
    }
    
    void get_next()
    {
        int i,j;
        i=0;
        j=-1;
        next[0]=-1;
        while(i<n)
        {
            if(j==-1||s[i]==s[j])
                i++,j++,next[i]=j;
            else
                j=next[j];
        }
    }
    
    int main()
    {
        ncas=1;
        while(scanf("%d",&n),n)
        {
            init();
            data_in();
            get_next();
            printf("Test case #%d\n",ncas++);
            for(int i=1;i<=n;i++)
            {
                int slen=2*next[i]-i;
                int cir=next[i]-slen;
                if(slen>=0&&i%cir==0)
                    printf("%d %d\n",i,i/cir);
                else
                    continue;
            }
            printf("\n");
        }
        return 0;
    }

    欢迎批评指正。谢谢!

    勸君惜取少年時&莫待無花空折枝
  • 相关阅读:
    C语言指针入门
    c的动态内存管理
    汇编入门基础与helloworld
    汇编1
    汇编2——完整的例子集合
    算法与数据结构——选择,插入,希尔排序
    MySQL
    MySQL 笔记
    CSS样式优先级
    GIT使用笔记
  • 原文地址:https://www.cnblogs.com/RainingDays/p/2766550.html
Copyright © 2011-2022 走看看