codevs 4189 字典(字典树)
#include<iostream> #include<cstdio> #include<cstring> #define maxn 300100 #define maxx 1010 using namespace std; char s[maxx]; struct node { int next[30]; bool w; }tree[maxn]; int tot; void add() { int l=strlen(s),i,j,k; int now=0; for(i=0;i<l;i++) { int x=s[i]-'a'+1; if(tree[now].next[x]) now=tree[now].next[x]; else { ++tot; tree[now].next[x]=tot; now=tot; } } tree[now].w=1; } int find() { int l=strlen(s),i,j,k; i=0; int now=0; while(i<l) { int x=s[i]-'a'+1; if(tree[now].next[x]) { i++; now=tree[now].next[x]; continue; } else return 0; } return 1; } int main() { int n,m,i,j,k; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%s",s); add(); } scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%s",s); if(find()) printf("YES\n"); else printf("NO\n"); } return 0; }