zoukankan      html  css  js  c++  java
  • Remember the Word,LA3942(Trie树+DP)

    Trie树基础题,记录下代码。

    #include <cstdio>
    #include <cstring>
    
    #define MaxNode 4005*100
    #define NodeSize 26
    #define MOD 20071027
    
    char givenword[300005];
    int ans[300005];
    int next[MaxNode][NodeSize];
    class Trie{
        public:
            int val[MaxNode];
            int sz;
            Trie(){
                sz = 1;     //初始时有一个根结点
                memset(next[0], 0, sizeof(next[0]));
            }
            int idx(char ch){
                return ch - 'a';
            }
            void insert(char *s, int v){
                int len = strlen(s);
                int d = 0;
                for(int i = 0; i < len; ++i){
                    int _idx = idx(s[i]);
                    if(!next[d][_idx]){
                        memset(next[sz],0,sizeof(next[sz]));
                        val[sz] = 0;
                        next[d][_idx] = sz++;
                    }
                    d = next[d][_idx];
                }
                val[d] = v;
            }
            void query(char *s,int pos){
                int len = strlen(s);
                int d = 0;
                for(int i = 0; i < len; ++i){
                    int _idx = idx(s[i]);
                    if(!next[d][_idx])  return;
                    d = next[d][_idx];
                    if(val[d]){
                        ans[pos] += ans[pos+i+1];
                        if(ans[pos] > MOD) ans[pos] -= MOD;
                    }
                }
                return;
            }
    };
    
    
    int main()
    {
        int S;
        int Case = 1;
        while(scanf("%s",givenword)!=EOF){
            int len = strlen(givenword);
            memset(ans,0,(len+1)*sizeof(int));
            ans[len] = 1;
            scanf("%d",&S);
            char tstr[105];
            Trie trie;
            for(int i = 0;i < S;++i){
                scanf("%s",tstr);
                trie.insert(tstr,1);
            }
            for(int i = len-1; i >= 0; --i){
                trie.query(&givenword[i],i);
            }
            printf("Case %d: ",Case++);
            printf("%d
    ",ans[0]);
        }
        return 0;
    }
    


  • 相关阅读:
    MySQL主从配置实现(同一台主机)
    MySQL主从配置实现
    FTP的安装配置使用
    NFS的安装配置使用
    Samba的安装配置使用
    Cacti的基本安装配置
    STL标准库-迭代器
    STL标准库-容器-unordered_set
    STL标准库-hash
    STL标准库-容器-rb_tree
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5330741.html
Copyright © 2011-2022 走看看