记录编号 153656 评测结果 AAAAAAAAAA
题目名称 [Youdao2010] 有道搜索框 最终得分 100
用户昵称 Gravatarnew 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");
	}
}