传送门:HihoCoder 1014
题解
熟练白书的数组模拟Trie树模板
AC code:
#include<iostream>
#include<cstring>
using namespace std;
const int maxn(1e6 + 5);
int cnt[maxn], ch[maxn][26];
int idx(char p){return p - 'a';}
struct Trie{
int sz;
Trie(){
sz = 1;
memset(cnt, 0, sizeof(cnt));
memset(ch, 0, sizeof(ch));
}
void insert_node(char *s){
int u = 0, len = strlen(s);
for(int i = 0; i < len; ++i){
int v = idx(s[i]);
if(!ch[u][v]){
ch[u][v] = sz++;
}
u = ch[u][v];
++cnt[u];
}
}
int query(char *s){
int u = 0, len = strlen(s);
for(int i = 0; i < len; ++i){
int v = idx(s[i]);
if(!ch[u][v]) return 0;
u = ch[u][v];
}
return cnt[u];
}
};
int main(){
int n, m;
char s[15];
while(cin >> n){
Trie root;
for(int i = 0; i < n; ++i) {
cin >> s;
root.insert_node(s);
}
cin >> m;
while(m--){
cin >> s;
cout << root.query(s) << endl;
}
}
return 0;
}

本文介绍了一个基于数组模拟Trie树的高效解决方案,用于解决HihoCoder平台上的1014号题目。该方案通过构建Trie树结构来实现字符串的插入与查询操作,能够快速统计给定前缀的出现次数。

435

被折叠的 条评论
为什么被折叠?



