您的位置:首页 > 其它

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

2016-07-14 15:53 429 查看
题目链接

简单题意

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

思路

简单的计数,但是因为单词的查询会超时(其实并不会),所以应该要用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]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: