HDU2072——单词数
2015-04-23 18:45
309 查看
字典树模板套用,求不同单词数的个数。
#include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <math.h> #include <algorithm> using namespace std; const int MAX=26; typedef struct TrieNode { int flag; struct TrieNode *next[MAX]; //该节点的后续节点 } TrieNode; TrieNode Memory[1000000]; int allocp = 0; char s[50000]; int sum=0; TrieNode * createTrieNode() { TrieNode * tmp = &Memory[allocp++]; tmp->flag = 1; for (int i = 0; i < MAX; i++) tmp->next[i] = NULL; return tmp; } void insertTrie(TrieNode * pRoot, char * str) { TrieNode * tmp = pRoot; int i = 0, k; //一个一个的插入字符 int sign=1; while (str[i]) { k = str[i] - 'a'; //当前字符 应该插入的位置 if (tmp->next[k]) { if(str[i+1]=='\0'&&tmp->next[k]->flag==1) sum++; } else { if(sign) { sum++; sign=0; } tmp->next[k] = createTrieNode(); } tmp = tmp->next[k]; i++; //移到下一个字符 } tmp->flag=0; } int main(void) { char temp[1000]; int i; int length; int j; while(gets(s)) { if(s[0]=='#') return 0; sum=0; length=strlen(s); allocp=0; TrieNode *Root = createTrieNode(); i=0; while(i<length) { j=0; while(s[i]!=' '&&i<length) { temp[j++]=s[i++]; } while(s[i]==' '&&i<length) { i++; } temp[j]='\0'; //printf("%s\n",temp); insertTrie(Root,temp); } printf("%d\n",sum); } return 0; }
相关文章推荐
- HDU 2072 单词数
- hdu-2072-单词数
- HDU 2072 单词数
- HDU2072 单词数
- hdu 2072 题目 单词数 (C,C++,Java)
- HDU 2072 单词数
- hdu 2072-单词数
- HDU 2072 单词数【STL】
- HDU_2072单词数
- hdu 2072 单词数
- hdu 2072 单词数
- HDU 2072 单词统计
- hdu2072单词数(c++ set集合的使用)
- HDU2072单词数
- hdu 2072 不同单词数
- HDU 2072 单词数
- hdu2072单词数 字典树做法
- HDU 2072 单词数
- hdu 2072 单词数(set ,stringstream)
- hdu 2072 : 单词数 (水)