记录编号 |
35807 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[Youdao2010] 有道搜索框 |
最终得分 |
100 |
用户昵称 |
王者自由 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.359 s |
提交时间 |
2012-03-03 14:50:08 |
内存使用 |
20.86 MiB |
显示代码纯文本
#include <cstdio>
#include <cstring>
const int N = 10000 * 20 + 10;
const int nil = -1;
struct node {
int r[26];
short is;
} T[N];
int t, u, n, q;
char w[30], s[30];
void Ins(char* s) {
int p = 0, k = 0;
while(s[k]) {
int v = s[k] - 'a';
if(T[p].r[v] == nil)
T[p].r[v] = ++t;
p = T[p].r[v];
k++;
}
T[p].is = 1;
}
void DFS(int k, int p) {
if(u >= 8)
return;
if(T[p].is != nil) {
w[k] = 0;
if(u > 0)
printf(" ");
printf("%s", w);
u++;
}
for(int i=0; i<26; i++) {
if(T[p].r[i] != nil) {
w[k] = i + 'a';
DFS(k+1, T[p].r[i]);
}
}
}
void Find(char* s) {
int p = 0, k = 0;
while(s[k] && p != nil) {
p = T[p].r[s[k] - 'a'];
k++;
}
if(p == nil) {
printf("%s\n", s);
return;
}
u = 0;
for(int i=0; i<k; i++)
w[i] = s[i];
DFS(k, p);
printf("\n");
}
int main() {
freopen("youdao.in", "r", stdin);
freopen("youdao.out", "w", stdout);
memset(T, nil, sizeof(T));
scanf("%d", &n);
for(int i=0; i<n; ++i) {
scanf("%s", s);
Ins(s);
}
scanf("%d", &q);
for(int i=0; i<q; ++i) {
scanf("%s", s);
Find(s);
}
return 0;
}