P3879
有没有dalao提下建议,我该怎样才能实现找出字符串出处的操作,悬棺
这是我的代码
#include<bits/stdc++.h>
using namespace std;
const int N=1000050;
int trie[N][70];
int cnt[N];
int id;
string s;
int n,l,m;
void insert(string s){
int p=0;
for(int i=0;i<s.size();i++){
/*
a~b 0~25
A~b 26~51
0~9 52~61
*/
int x;
if(s[i]>='A'&&s[i]<='Z'){
x=s[i]-'A'+26;
}else if(s[i]>='a'&&s[i]<='z'){
x=s[i]-'a';
}else if(s[i]>=0&&s[i]<=9){
x=s[i]+52;
}
if(trie[p][x]==0)trie[p][x]=++id;
p=trie[p][x];
}
cnt[p]++;
}
int find(string s){
int p=0;
int ans[1010];
for (int i = 0; i < s.size(); i++){
int x;
if(s[i]>='A'&&s[i]<='Z'){
x=s[i]-'A'+26;
}else if(s[i]>='a'&&s[i]<='z'){
x=s[i]-'a';
}else if(s[i]>=0&&s[i]<=9){
x=s[i]+52;
}
if(trie[p][x]==0)return 0;
p=trie[p][x];
}
return 1;
//}
//void where(string s){
// int p=0;
// int ans[1010];
// for (int i = 0; i < s.size(); i++){
// int x;
// if(s[i]>='A'&&s[i]<='Z'){
// x=s[i]-'A'+26;
// }else if(s[i]>='a'&&s[i]<='z'){
// x=s[i]-'a';
// }else if(s[i]>=0&&s[i]<=9){
// x=s[i]+52;
// }
// if(trie[p][x]==0)return 0;
// p=trie[p][x];
// }
// return 1;
//}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>l;
for(int j=1;j<=l;j++){
cin>>s;
insert(s);
}
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>s;
if(find(s)){
}
else cout<<"\n";
}
cout<<endl<<endl;
}
/*
*/