zoukankan      html  css  js  c++  java
  • Uva1401 Remember the Word

    用trie树匹配字串,树上套个dp即可

     1 /*By SilverN*/
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cmath>
     5 #include<cstring>
     6 #include<algorithm>
     7 #define LL long long
     8 using namespace std;
     9 const int mxn=400010;
    10 const int mod=20071027;
    11 struct trie{
    12     int a[mxn][26];
    13     int end[mxn];
    14     int cnt;
    15     void insert(char s[]){
    16         int len=strlen(s);
    17         int now=1;
    18         for(int i=0;i<len;++i){
    19             if(!a[now][s[i]-'a'])a[now][s[i]-'a']=++cnt;
    20             now=a[now][s[i]-'a'];
    21         }
    22         end[now]++;
    23     }
    24 };
    25 trie t;
    26 char s[mxn];
    27 char c[mxn];
    28 int n;
    29 int f[mxn];
    30 void dp(int cas){
    31     memset(f,0,sizeof f);
    32     int len=strlen(s+1);
    33     int i,j;
    34     f[len+1]=1;
    35     for(i=len;i;--i){
    36         int now=1;
    37         for(j=i;j<=len;++j){
    38             now=t.a[now][s[j]-'a'];
    39             if(!now)break;
    40             if(t.end[now])
    41                 f[i]=(f[i]+f[j+1])%mod;
    42         }
    43 //        printf("f[%d]==%d
    ",i,f[i]);
    44     }
    45     printf("Case %d: %d
    ",cas,f[1]);
    46     return;
    47 }
    48 int main(){
    49     int cas=0;
    50     while(scanf("%s",s+1)!=EOF){
    51         memset(t.a,0,sizeof t.a);
    52         memset(t.end,0,sizeof t.end);
    53         t.cnt=1;
    54         int i,j;
    55         scanf("%d",&n);
    56         for(i=1;i<=n;++i){
    57             scanf("%s",c);
    58             t.insert(c);
    59         }
    60         dp(++cas);
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    python面向对象编程(1)——基本概念,术语,self,构造器
    django-中间件
    集合
    深入字典
    django使用小贴士
    自动化发送微信
    django-模板继承
    SMTP发送邮件
    git的使用
    django-csrf攻击
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/6013923.html
Copyright © 2011-2022 走看看