poj 2503 Trie树
典型的Trie树, 算是复习一下字符串吧, 就是输入有点恶心,代码如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 500000+100; struct Trie{ bool isword; int next[26]; char words[15]; Trie(){ memset(next, -1, sizeof(next)); isword = false; } }Root; Trie node[maxn]; int n; void Insert(char *tar){ Trie *head = &Root; char *s = tar; while(*tar!=' ') tar++; *tar='\0'; tar++; while(*tar!='\0'){ int id = *tar - 'a'; if(head->next[id] == -1){ head->next[id] = n++; } head = &node[head->next[id]]; tar++; } head->isword = true; //printf("s = %s\n", s); strcpy(head->words, s); } char *Search(char *tar) { Trie *head = &Root; while(*tar){ int id = *tar - 'a'; if(head->next[id] == -1) return NULL; head = &node[head->next[id]]; tar++; } if(head->isword) return head->words; else return NULL; } char str[100]; int main(){ n = 0; while(gets(str)){ bool kongge = false; int len = strlen(str); for(int i=0; i<len; i++) { if(str[i] == ' '){ kongge = true; break; } } if(str[0]<'a'||str[0]>'z') continue; if(kongge) Insert(str); else { char *p = Search(str); if(p == NULL) printf("eh\n"); else printf("%s\n", p); } } return 0; }