题解
Trie树入门第一步。
注:g++一直MLE,请选择c++编译。
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <fstream>
#include <cstring>
using namespace std;
#define MAXN 26
struct Trie
{
int cnt;
Trie* next[MAXN];
Trie():cnt(0){ memset(next, 0, sizeof(next)); }
};
Trie* newNode()
{
Trie* p = new Trie();
return p;
}
void Insert(Trie* root, string& s)
{
Trie* p = root;
for(int i = 0; i < (int)s.length(); ++i){
int id = s[i] - 'a';
if(p->next[id] == NULL) p->next[id] = newNode();
p = p->next[id];
p->cnt++;
}
}
int Search(Trie* root, string& s)
{
Trie* p = root;
for(int i = 0; i < (int)s.length(); ++i){
int id = s[i] - 'a';
p = p->next[id];
if(!p) return 0;
}
return p->cnt;
}
int main()
{
string word;
Trie* root = newNode();
while(getline(cin, word) && word.length()) Insert(root, word);
while(cin >> word){
cout << Search(root, word) << endl;
}
return 0;
}