在网吧做题,赶上杭电OJ不能交题,先把代码存在博客里,回学校提交,有错再改。
/*
* hdu1251/win.c
* Created on: 2011-8-18
* Author : ben
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct Trie {
int num;
struct Trie * br[26];
} Trie;
Trie* newTrieNode() {
int i;
Trie* node = (Trie *) malloc(sizeof(Trie));
for (i = 0; i < 26; i++) {
node->br[i] = NULL;
}
node->num = 0;
return node;
}
void insert(Trie *root, char *str, int len) {
int i;
if (len <= 0) {
root->num = 1;
return;
}
i = (*str) - 'a';
if (!root->br[i]) {
root->br[i] = newTrieNode();
}
insert(root->br[i], str + 1, len - 1);
}
void count(Trie *root) {
int i;
for (i = 0; i < 26; i++) {
if (root->br[i]) {
count(root->br[i]);
root->num += root->br[i]->num;
}
}
}
int find(Trie *root, char *str, int len) {
int i;
if (len <= 0) {
return root->num;
}
i = (*str) - 'a';
if (!root->br[i]) {
return 0;
} else {
return find(root->br[i], str + 1, len - 1);
}
}
void destroy(Trie *root) {
int i;
for (i = 0; i < 26; i++) {
if (root->br[i] != NULL) {
destroy(root->br[i]);
}
}
free(root);
}
void work() {
Trie *root = newTrieNode();
char str[100];
int len;
while (1) {
gets(str);
len = strlen(str);
if (len <= 0) {
break;
}
insert(root, str, len);
}
count(root);
while (scanf("%s", str) != EOF) {
printf("%d\n", find(root, str, strlen(str)));
}
destroy(root);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif
work();
return 0;
}
果然有错,还是太粗心了……