字典树~
|
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 |
#include <cstdio> #include <cstring>using
namespace std;int cnt,n;char
s[12];struct
Node{int
sum; int
son[26];}trie[500000];void
insert(char
*s){ for(int
l=strlen(s),x=0,i=0;i<l;i++){ if(!trie[x].son[s[i]-‘a‘])trie[x].son[s[i]-‘a‘]=++cnt; x=trie[x].son[s[i]-‘a‘]; trie[x].sum++; }}int
find(char
*s){ for(int
l=strlen(s),x=0,i=0;i<l;i++){ if(!trie[x].son[s[i]-‘a‘])return
0; x=trie[x].son[s[i]-‘a‘]; if(i==l-1)return
trie[x].sum; }}int
main(){ while(gets(s)){ if(strlen(s)==0)break; insert(s); } while(gets(s))printf("%d\n",find(s)); return
0;} |
原文:http://www.cnblogs.com/forever97/p/3559382.html