zoukankan      html  css  js  c++  java
  • hdu 3336 Count the string

    我不是参考这里的,你们不要质疑我。

    觉得上面说的很好。我只是想加一些自己的思考。

    DP数组是记录的 以当前位置结尾的。

    比如 ababab

    当i=1时 此时就只有 a

    当i=2时 此时只有 ab    但是ab串中也有a呀  为什么不要  因为上面说的是以 b结尾  所以最后一个一定要是b

    当i=3时 此时 由 fail 数组可以得到  f【3】=1    也就是第一个a与第二个a匹配到了。所以加上ba串就是i=3 时候的前缀数

    ……

    ……

    我已刻入灵魂

    #include <iostream>
    #include <cstdio>
    #define MAXN 200005
    using namespace std;
    
    int m;
    char P[MAXN];
    int f[MAXN];
    int dp[MAXN];
    void getfail()
    {
        //int m=strlen(P);
        f[0]=0;f[1]=0;
        for(int i=1;i<m;i++)
        {
            int j=f[i];
            while(j&&P[i]!=P[j])j=f[j];
            f[i+1]=P[i]==P[j]?j+1:0;
        }
    }
    
    /*int find()
    {
        int n=strlen(T);
        int m=strlen(P);
        getfail();
        int j=0;
        for(int i=0;i<n;i++)
        {
            while(j&&P[j]!=T[i])j=f[j];
            if(P[j]==T[i])j++;
            if(j==m)printf("%d
    ",i-m+1);
        }
    }
    */
    int main()
    {
        int CASE;
        scanf("%d",&CASE);
        while(CASE--)
        {
            scanf("%d",&m);
            scanf("%s",P);
            getfail();
            dp[0]=0;
            dp[1]=1;
            int sum=1;
            for(int i=2;i<=m;i++)
            {
                dp[i]=dp[f[i]]+1;
                sum=(sum+dp[i])%10007;
                //printf("%d ",dp[i]);
            }
            cout<<sum<<endl;
        }
    }
    


  • 相关阅读:
    法院
    Spring Cloud常用组件
    PowerShell使用教程
    浅谈3DES加密解密
    SC win consul
    SB-Token-Jwt
    前端MVC Vue2学习总结
    spring-session-data-redis
    SpringBoot WS
    SpringBoot之使用Spring Session集群-redis
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3249194.html
Copyright © 2011-2022 走看看