codeforces #291 div2 C(Trie,DFS)

2015-02-15 04:22:53

思路:一道比较明显的字典树... 看起来数据会比较大,所以用静态版Trie比较保险。

  把所有的初始串读进Trie中,然后就是Dfs来枚举哪一位不一样了。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cmath>
 5 #include <vector>
 6 #include <map>
 7 #include <set>
 8 #include <stack>
 9 #include <queue>
10 #include <string>
11 #include <iostream>
12 #include <algorithm>
13 using namespace std;
14 
15 #define MEM(a,b) memset(a,b,sizeof(a))
16 #define REP(i,n) for(int i=1;i<=(n);++i)
17 #define REV(i,n) for(int i=(n);i>=1;--i)
18 #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
19 #define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
20 #define getmid(l,r) ((l) + ((r) - (l)) / 2)
21 #define MP(a,b) make_pair(a,b)
22 
23 typedef long long ll;
24 typedef pair<int,int> pii;
25 const int INF = (1 << 30) - 1;
26 
27 int n,m,tlen,tot;
28 char s[6000005];
29 
30 struct Trie{
31     int next[3];
32     int v;
33 }t[6000005];
34 
35 void Insert_tree(char *str){
36     int len = strlen(str);
37     int p = 0;
38     for(int i = 0; i < len; ++i){
39         int id = str[i] - 'a';
40         if(t[p].next[id] == 0){
41             t[p].next[id] = ++tot;
42         }
43         p = t[p].next[id];
44     }
45     t[p].v = 1;
46 }
47 
48 bool Dfs(int cur,int p,int flag){
49     if(p >= tlen){
50         if(flag && t[cur].v) return true;
51         else return false;
52     }
53     int id = s[p] - 'a';
54     if(flag == 0){ //change
55         for(int i = 0; i < 3; ++i) if(i != id && t[cur].next[i]){
56             if(Dfs(t[cur].next[i],p + 1,1))
57                 return true;
58         }
59     }
60     if(t[cur].next[id] && Dfs(t[cur].next[id],p + 1,flag)) //no change
61         return true;
62     return false;
63 }
64 
65 int main(){
66     tot = 0;
67     scanf("%d%d",&n,&m);
68     REP(i,n){
69         scanf("%s",s);
70         Insert_tree(s);
71     }
72     REP(i,m){
73         scanf("%s",s);
74         tlen = strlen(s);
75         if(Dfs(0,0,0)) printf("YES\n");
76         else printf("NO\n");
77     }
78     return 0;
79 }

 

posted @ 2015-02-15 16:25  Naturain  阅读(106)  评论(0编辑  收藏  举报