hdu 3336 Count the string (KMP+DP)

Posted guapisolo

tags:

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

题目大意:给你一个字符串,求所有前缀在原串的出现次数之和

打个表推推,KMP+DP随便水水就过了吧

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #define N 200100
 5 #define mod 10007
 6 #define ui unsigned int
 7 using namespace std;
 8 
 9 int T,n,m,len;
10 int nxt[N];
11 ui f[N];
12 char s[N];
13 void clr()
14 {
15     memset(f,0,sizeof(f));
16     memset(s,0,sizeof(s));
17     memset(nxt,0,sizeof(nxt));
18 }
19 void get_kmp()
20 {
21     int i=0,j=-1;
22     nxt[0]=-1;
23     while(i<=len)
24     {
25         if(j==-1||s[i]==s[j])
26         {
27             i++;
28             j++;
29             nxt[i]=j;
30         }else{
31             j=nxt[j];
32         }
33     }
34 }
35 ui solve()
36 {
37     ui ans=0;
38     for(int i=1;i<=len;i++)
39     {
40         if(nxt[i]>=0) f[i]=f[nxt[i]]+1;
41         else f[i]=1;
42         f[i]%=mod;
43         ans+=f[i];
44         ans%=mod;
45     }
46     return ans;
47 }
48 
49 int main()
50 {
51     scanf("%d",&T);
52     while(T--)
53     {
54         scanf("%d",&n);
55         clr();
56         scanf("%s",s);
57         len=strlen(s);
58         get_kmp();
59         printf("%u
",solve());
60     }
61     return 0;
62 }
63 
64     
65     

 

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

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)