0%

Trie树

字典树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAX_N=1e4+5;
int tri[MAX_N][30];
int color[MAX_N];
int k=1;


void Insert(char * a)
{
int alen=strlen(a);
int p=0;
for(int i=0;i<alen;i++)
{
int temp=a[i]-'a';
if(!tri[p][temp])
{
tri[p][temp]=k;
k++;
}
p=tri[p][temp];
}
color[p]=1;
}

int Query(char *a)
{
int alen=strlen(a);
int p=0;
for(int i=0;i<alen;i++)
{
int temp=a[i]-'a';
if(!tri[p][temp])
{
return 0;
}
p=tri[p][temp];
}
return color[p]==1;
}


int main(){

int t,q;
char s[20];
scanf("%d%d",&t,&q);
while(t--)
{
scanf("%s",s);
Insert(s);
}
while(q--)
{
scanf("%s",s);
if(Query(s)) printf("YES\n");
else printf("NO\n");
}

return 0;
}
-------------本文结束感谢您的阅读-------------