hdu 1251 统计难题 (trie树模板题)

hdu 1251 题目链接

题意:先给一个单词表,然后给出若干查询,每个查询一个单词,问单词表中以这个单词为前缀的单词的个数。

思路:trie树裸题。第一次写trie树。。感觉要注意的是trie树是一个比较耗费空间的数据结构。。? 以及动态开辟内存记得free...?

/* ***********************************************
Author :111qqz
Created Time :2016年08月14日 星期日 19时58分41秒
File Name :code/hdu/1251.cpp
************************************************ */
 1#include <cstdio>
 2#include <cstring>
 3#include <iostream>
 4#include <algorithm>
 5#include <vector>
 6#include <queue>
 7#include <stack>
 8#include <set>
 9#include <map>
10#include <string>
11#include <cmath>
12#include <cstdlib>
13#include <deque>
14#include <ctime>
15#define fst first
16#define sec second
17#define lson l,m,rt<<1
18#define rson m+1,r,rt<<1|1
19#define ms(a,x) memset(a,x,sizeof(a))
20typedef long long LL;
21#define pi pair < int ,int >
22#define MP make_pair
1using namespace std;
2const double eps = 1E-8;
3const int dx4[4]={1,0,0,-1};
4const int dy4[4]={0,-1,1,0};
5const int inf = 0x3f3f3f3f;
6char s[20];
 1struct Trie
 2{
 3    struct Node
 4    {
 5	Node *nxt[26];
 6	int cnt;
 7	Node()
 8	{
 9	    for ( int i = 0 ; i < 26;  i++) nxt[i]=NULL;
10	    cnt = 0 ;
11	}
12    };
13    Node *root;
14    void init()
15    {
16	root = new Node();
17    }
18    Trie()
19    {
20	root = new Node();
21    }
22    void Insert(char *s)
23    {
24	Node *u = root;
25	int len = strlen(s);
26	for ( int i = 0 ; i < len ; i++)
27	{
28	    int v = s[i]-'a';
29	    if (u->nxt[v]==NULL) u->nxt[v]=new Node();
30	    u = u->nxt[v];
31	    u->cnt++;
32	}
33    }
34    int Find(char *s)
35    {
36	Node *u = root;
37	int len = strlen(s);
38	for ( int i = 0 ; i < len ; i++)
39	{
40	    int v = s[i]-'a';
41	    if (u->nxt[v]==NULL) return 0;
42	    u = u->nxt[v];
43	}
44	return u->cnt;
45    }
1}trie;
2int main()
3{
4	#ifndef  ONLINE_JUDGE 
5	freopen("code/in.txt","r",stdin);
6  #endif
 1	while (gets(s))
 2	{
 3	    int len = strlen(s);
 4	    if (len==0) break;
 5	    trie.Insert(s);
 6	}
 7	while (gets(s))
 8	{
 9	    int ans = trie.Find(s);
10	    printf("%d\n",ans);
11	}
1  #ifndef ONLINE_JUDGE  
2  fclose(stdin);
3  #endif
4    return 0;
5}