您的位置:首页 > 其它

HDU 1251 字典树

2015-06-18 21:06 246 查看
题意:中文题。。。问你某个单词是多少单词的前缀

思路:很裸的字典树。。。人生第一次用。。。

#include <cstdio>
#include <cstring>
using namespace std;

#define REP( i, a, b ) for( int i = a; i < b; i++ )

struct Trie{
int va;
Trie *next[26];
Trie(int va) : va(va) { REP(i, 0, 26) next[i] = NULL; }
};

void CreatTrie(Trie *root, char *str){
Trie *p = root;
int len = strlen(str);
REP(i, 0, len){
int id = str[i] - 'a';
if(p -> next[id] == NULL){
Trie *q = new Trie(1);
p -> next[id] = q;
p = p -> next[id];
}
else{
p -> next[id] -> va++;
p = p -> next[id];
}
}
}

int FindTrie(Trie *root, char *str){
Trie *p = root;
int len = strlen(str);
REP(i, 0, len){
int id = str[i] - 'a';
if(p -> next[id] == NULL) return 0;
p = p -> next[id];
}
return p -> va;
}

int main()
{
//freopen("in.txt", "r", stdin);
char str[15];
Trie *root = new Trie(0);
while(gets(str) && strcmp(str, "\0")) CreatTrie(root, str);
while(~scanf("%s", str)) printf("%d\n", FindTrie(root, str));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: