记录编号 |
324955 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOI 2000]单词查找树 |
最终得分 |
100 |
用户昵称 |
sxysxy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.022 s |
提交时间 |
2016-10-18 21:30:32 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <string>
#include <iostream>
using namespace std;
#ifndef __cplusplus
typedef enum
{
false,
true
}bool;
#endif
#define NEXT_SIZE 26
typedef struct trieNodeType
{
bool isFinal;
struct trieNodeType *(*next);
}trieNode, *pTrieNode;
typedef struct trieType
{
trieNode *root;
}trie;
void initTrie(trie *t)
{
t -> root = (trieNode *)malloc(sizeof(trieNode));
memset(t -> root, 0, sizeof(trieNode));
}
int ans = 1;
trieNode *appendChar(trieNode *d, int t)
{
if(!d -> next)
{
d -> next = (pTrieNode *)malloc(sizeof(pTrieNode) * NEXT_SIZE);
memset(d -> next, 0, sizeof(pTrieNode) * NEXT_SIZE);
}
if(!d -> next[t])
{
ans++;
d -> next[t] = (pTrieNode)malloc(sizeof(trieNode));
memset(d -> next[t], 0, sizeof(trieNode));
}
return d -> next[t];
}
void insertWord(trie *t, const char *w, int len)
{
trieNode *fw = t -> root;
for(int i = 0; i < len; i++)
{
char c = w[i];
fw = appendChar(fw, c-'A');
}
fw -> isFinal = true;
}
bool existWord(trie *t, char *w, int len)
{
trieNode *fw = t -> root;
for(int i = 0; i < len; i++)
{
if(!fw -> next)
return false;
char c = w[i];
if(fw -> next[c-'A'])
fw = fw -> next[c-'A'];
else return false;
if(!fw)return false;
}
return fw -> isFinal;
}
char buf[233];
int main()
{
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
string s;
trie t;
initTrie(&t);
while(cin >> s)
insertWord(&t, s.c_str(), s.length());
cout << ans;
return 0;
}