HDU 3336 Count the string

Posted 啦啦啦天啦噜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 3336 Count the string相关的知识,希望对你有一定的参考价值。

题意:字符串的每个前缀在原字符串中出现的次数和

思路:我们求出字符串的next数组,对于每个前缀,最少有一个,然后对于每个位置我们看他的next数组值是否大于0,如果大于0,ans++

代码:(有点看不懂网上得到通解)

#include <cstdio>
#include <cstring>
const int maxn=2e5+7;
const int MOD=10007;
char a[maxn];
int len;
int next[maxn];

void getNext(char T[])
{
    int j, k;
    j = 0;
    k = -1;
    next[0] = -1;
    while(j < len)
        if(k == -1 || T[j] == T[k])
            next[++j] = ++k;
        else
            k = next[k];
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&len);
        scanf("%s",a);
        memset(next,0,sizeof(next));
        getNext(a);
//        for(int i=0;i<=len;i++){
//            printf("%d ",next[i]);
//        }
//        puts("");
        int ans=len%MOD;
        for(int i=1;i<=len;i++){
            if(next[i]>0)ans++;
            ans%=MOD;
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

以上是关于HDU 3336 Count the string的主要内容,如果未能解决你的问题,请参考以下文章

hdu 3336 Count the string

HDU 3336 Count the string

hdu 3336 Count the string

HDU 3336 Count the string

HDU 3336 Count the string (基础KMP)

HDU - 3336 Count the string (扩展kmp)