zoukankan      html  css  js  c++  java
  • hdu 1358 KMP的next数据运用

    由于next[i]保存的是前i-1个字符中最大的重复子序列,那么i-next[i]就是循环节。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int next[1000100];
    void getnext(char *str)
    {
        int j,k;
        memset(next,0,sizeof(next));
        j=0;
        k=-1;
        next[0]=-1;
        while(str[j])
        {
            if(k==-1 || str[j]==str[k])
                next[++j]=++k;
            else
                k=next[k];
        }
    }
    int main()
    {
        int n,i,j;
        int Case=0;
        char str[1000010];
        while(scanf("%d",&n),n)
        {
            scanf("%s",&str);
            getnext(str);
            printf("Test case #%d
    ",++Case);
            for(i=2;i<=n;i++)
            {
                int x=i/(i-next[i]);
                if(i%(i-next[i])==0&&x>1)
                    printf("%d %d
    ",i,x);
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    团队项目-选题报告
    图论3-分层图最短路
    图论2-次短路计数
    图论1-k短路
    noi online 提高组t2冒泡排序
    图和树
    搜索(bfs)
    搜索(dfs)
    笔记
    打工
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3174082.html
Copyright © 2011-2022 走看看