简单题意
给出几个单词和一个字母序列,问这个序列中最多有多少不重叠的单词
思路
简单的计数,但是因为单词的查询会超时(其实并不会),所以应该要用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]);
}
}