记录编号 |
153656 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[Youdao2010] 有道搜索框 |
最终得分 |
100 |
用户昵称 |
new ioer |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.071 s |
提交时间 |
2015-03-18 17:41:13 |
内存使用 |
0.30 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
struct trie{
bool end;
trie *c[26];
trie(){
end=0;
for(int i=0;i<26;i++) c[i]=NULL;
}
};
int n,m,tot,len;
char buf[20],buff[20];
void print(int p){
for(int i=0;i<=p;i++) putchar(buff[i]);
putchar(' ');
}
void ins(int i,trie *&o){
if(o==NULL) o=new trie;
if(i+1==len) {o->end=1;return;}
ins(i+1,o->c[buf[i+1]-'a']);
}
bool ask(int i,trie *o){
if(i<len){
if(o==NULL) return 0;
if(i+1<len){
buff[i]=buf[i];
return ask(i+1,o->c[buf[i+1]-'a']);
}
else{
buff[i]=buf[i];
if(o->end) tot++,print(i);
for(int j=0;j<26;j++){
if(o->c[j]!=NULL)
buff[i+1]='a'+j,ask(i+1,o->c[j]);
if(tot==8) return 1;
}
return 1;
}
}
if(tot==8) return 1;
if(o->end) tot++,print(i);
for(int j=0;j<26;j++){
if(o->c[j]!=NULL)
buff[i+1]='a'+j,ask(i+1,o->c[j]);
if(tot==8) return 1;
}
return 1;
}
int main(){
freopen("youdao.in","r",stdin);
freopen("youdao.out","w",stdout);
trie *root;
scanf("%d",&n);
while(n--) scanf("%s",buf),len=strlen(buf),ins(-1,root);
scanf("%d",&m);
while(m--){
scanf("%s",buf),len=strlen(buf),tot=0;
if(!ask(0,root->c[buf[0]-'a'])) printf("%s\n",buf);
else printf("\n");
}
}