zoukankan      html  css  js  c++  java
  • call 大佬 help7——kmp 补齐 循环节

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

    用kmp算法,那么

    但是也等于上面的是正确的

    也等于下面是错误的

    why?

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int n,t;
    char s[1000001];
    int f[1000010];
    void getnext()
    {
        for(int i=1;i<n;i++)
        {
            int j=f[i];
            while(j&&s[i]!=s[j]) j=f[j];
            f[i+1]= s[i]==s[j] ? j+1:0;
        }
    }
    int main()
    {
            scanf("%d",&t);
            while(t--)
            {
                scanf("%s",s);
                n=strlen(s);
                memset(f,0,sizeof(f));
                getnext();
                if(f[n]==0) printf("%d
    ",n);
                else if(n%(n-f[n])==0) printf("0
    ");
                else
                {
                    int a=n-f[n];
                    printf("%d
    ",a-n%a);
                }
            }
    }
    正确的
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int n,t;
    char s[1000001];
    int f[1000010];
    void getnext()
    {
        for(int i=1;i<n;i++)
        {
            int j=f[i];
            while(j&&s[i]!=s[j]) j=f[j];
            f[i+1]= s[i]==s[j] ? j+1:0;
        }
    }
    int main()
    {
            scanf("%d",&t);
            while(t--)
            {
                scanf("%s",s);
                n=strlen(s);
                memset(f,0,sizeof(f));
                getnext();
                if(f[n]==0) printf("%d
    ",n);
                else if(n%(n-f[n])==0) printf("0
    ");
                else
                {
                    if(f[n]<=n/2) printf("%d
    ",n-f[n]*2);
                    else printf("%d
    ",2*n-3*f[n]);
                }
            }
    }
    错误的
  • 相关阅读:
    IOC / AOP
    Volatile
    观察者模式
    Gang Of Four的23中设计模式
    适配器模式
    享元模式
    设计模式
    B树和B+树
    Java内存模型(JMM)
    【Java的IO流之文件字符输入输出流 25】
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6485789.html
Copyright © 2011-2022 走看看