zoukankan      html  css  js  c++  java
  • hdu 1358 Period (KMP)

    http://acm.hdu.edu.cn/showproblem.php?pid=1358

    几天看了kmp,觉得其实挺有趣的,可是当自己做题的时候才知道,它的用法是很灵活的,当计算重复子串的时候最好next的下标为-1开始,并且要注意数组的大小,因为数组开小了,所以一直wa。。。

    代码:

    #include <stdio.h>

    #include <string.h>

    #include <stdlib.h>

    char s[1000000];

    int  len,next[1000000];

    int main()

    {

        

        int t=0,a;

        while(scanf("%d",&len),len)

        {

                 scanf("%s",s);

                 printf("Test case #%d\n",++t);

                 next[0]=-1; int i=0,j=-1;

                    while(len>i)

                    {

                               if(j==-1||s[i]==s[j])

                               {  

                                    ++i;++j;

                                    next[i]=j;                       

                               }

                               else

                               j=next[j];

                    }

                   for(int k=1;k<=len;++k)

                   {  

                      //  printf("k:%d %d\n",k,next[k]);

                        if(!(k%(k-next[k]))&&next[k]!=0)

                        {

                             a=k/(k-next[k]);

                             printf("%d %d\n",k,a);

                        } 

                   }

                printf("\n");

        }

       // system("pause");

        return 0;

    }

  • 相关阅读:
    [PY3]——内置数据结构(2)——元组及其常用操作
    [PY3]——内置数据结构(1)——列表及其常用操作
    [PY3]——基本语法
    session和cookie介绍以及session简单应用
    php中获取当前系统时间、时间戳
    ajax之XML简介
    Ajax练习题
    ajax语法
    JQUERY选中问题
    JSON
  • 原文地址:https://www.cnblogs.com/yuelingzhi/p/2126361.html
Copyright © 2011-2022 走看看