7_8_A题 Article Decryption 题解[soj 3596](trie树)

题目链接

简单题意

给出几个单词和一个字母序列,问这个序列中最多有多少不重叠的单词

思路

简单的计数,但是因为单词的查询会超时(其实并不会),所以应该要用trie树来进行对单词的查询,但实际上因为数据比较弱,所以也可以直接暴力查。。。

代码

这是暴力的做法,trie树的做法之后再补上。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3+5;
const int mod = 835672545;
char arr[maxn][maxn];
int main (){
    int T;
    scanf("%d",&T);
    while(T--){
        int n;
        scanf("%d",&n);
        for(int i = 0 ; i < n ; i ++){
            scanf("%s", arr[i]);
        }
        char str[maxn];
        scanf("%s",str);
        int len = strlen(str);
        int cnt[maxn];
        memset(cnt,0,sizeof cnt);
        cnt[0] = 1;
        for(int i = 0 ; i <= len ; i ++){
            for(int k = 0 ; k < n ; k ++){
                bool flag = true;
                int le = strlen(arr[k]);
                if(i+le > len) continue;
                for(int j = 0 ; j < le ; j ++){
                    if(arr[k][j] != str[i+j]) {
                        flag = false ;
                        break;
                    }
                }
                if(flag) 
                cnt[i+le] = (cnt[i+le] + cnt[i]) %mod;
            }
        }
        printf("%d\n",cnt[len]);
    }
}
    原文作者:Trie树
    原文地址: https://blog.csdn.net/baidu_19306071/article/details/51910078
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注