记录编号 324955 评测结果 AAAAAAAAAA
题目名称 [NOI 2000]单词查找树 最终得分 100
用户昵称 Gravatarsxysxy 是否通过 通过
代码语言 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;
}