hihocoder-1014-字典树
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <utility>
#include <stack>
#include <functional>
using namespace std;
typedef long long lovelive;
const int inf = INT_MAX;
const double pai = acos(-1.0);
const double gold = (sqrt(5.0) - 1.0) / 2.0;
struct node
{
int child[26], cnt;
void init()
{
cnt = 0;
memset(child, -1, sizeof(child));
}
};
node trie_arr[1000117];
int n, m, num, countc;
char input_str_arr[12], qu_str_arr[12];
void input_data() //trie建立
{
int i, j, k, pos;
memset(input_str_arr, 0, sizeof(input_str_arr));
scanf("%s", input_str_arr);
i = 0, pos = 0;
while(input_str_arr[i])
{
k = input_str_arr[i] - 'a';
if(trie_arr[pos].child[k] == -1)
{
trie_arr[num].init();
trie_arr[pos].child[k] = num++;
}
pos = trie_arr[pos].child[k];
trie_arr[pos].cnt += 1;
i += 1;
}
return ;
}
void solve() //trie查询
{
int i, j, k, pos;
countc = 0;
memset(qu_str_arr, 0, sizeof(qu_str_arr));
scanf("%s", qu_str_arr);
i = 0, pos = 0;
while(qu_str_arr[i])
{
k = qu_str_arr[i] - 'a';
if(trie_arr[pos].child[k] == -1)
{
countc = 0;
return ;
}
pos = trie_arr[pos].child[k];
i += 1;
}
countc = trie_arr[pos].cnt;
return ;
}
void output_data()
{
int i, j, k;
printf("%d\n", countc);
return ;
}
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
// freopen("in.in", "r", stdin);
// freopen("out.out", "w", stdout);
#endif // ONLINE_JUDGE
int i, j, k;
while(scanf("%d", &n) != EOF)
{
num = 1;
trie_arr[0].init();
while(n--)
{
input_data();
}
scanf("%d", &m);
while(m--)
{
solve();
output_data();
}
}
return 0;
}
没什么可说的吧。。。