记录编号 54687 评测结果 AAAAAAAAAA
题目名称 [Youdao2010] 有道搜索框 最终得分 100
用户昵称 Gravatarfeng 是否通过 通过
代码语言 C++ 运行时间 0.192 s
提交时间 2013-03-12 10:02:19 内存使用 3.15 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
struct Trie{
	bool flag;
	int v;
	Trie *nex[26];
};
Trie *root;
char str[501];
char ans[100];
int sum=0;
Trie *New_Trie(){
	Trie *temp=new Trie;
	temp->v=1;
	for (int i=0;i<26;i++)
		temp->nex[i]=NULL;
	return temp;
}
void build(char *str){
	int len=strlen(str);
	Trie *p=root;
	for (int i=0;i<len;++i){
		int id=str[i]-'a';
		if (p->nex[id]==NULL){
			//ans++;
			Trie *q=New_Trie();
			p->nex[id]=q;
			p=p->nex[id];
		}else{
			p->nex[id]->v++;
			p=p->nex[id];
		}
	}
	//p->v=-1;
}
Trie *findTrie(char *str){
	int len=strlen(str);
	Trie *p=root;
	Trie *q=NULL;
	for (int i=0;i<len;++i){
		int id=str[i]-'a';
		q=p;
		p=p->nex[id];
		if (p==NULL) return NULL;
	}
	return p;
}
void dfs_print(Trie *pos,int o){
	Trie *p=pos;
	if (p==NULL){
		int len=strlen(str);
		for (int j=0;j<len;j++)
				printf("%c",str[j]);
		return ;
	}
	int ss=0;
	for (int i=0;i<26;i++)
		if (p->nex[i]!=NULL)
		ss+=p->nex[i]->v;
	if (ss<p->v){
	//	for (int i=1;i<=p->v-ss;i++){
			int len=strlen(str);
			sum++;
			for (int j=0;j<len;j++)
				printf("%c",str[j]);
			for (int j=1;j<o;j++)
				printf("%c",ans[j]);
			printf(" ");
			
		}
			
	//}
	//bool flag=true;
	for (int i=0;i<26;i++){
		if (sum==8) return ;
		ans[o]=i+'a';
		if (p->nex[i]==NULL);
		else{
			//flag=true;
			dfs_print(p->nex[i],o+1);
		}
		
	}
	/*if (!flag){
			int len=strlen(str);
			sum++;
			for (int j=0;j<len;j++)
				printf("%c",str[j]);
			for (int j=1;j<o;j++)
				printf("%c",ans[j]);
			printf(" ");
			if (sum==8) return ;
		}*/
}
void init_work(){
	freopen("youdao.in","r",stdin);
	freopen("youdao.out","w",stdout);
	int n,m;
	scanf("%d\n",&n);
	root=New_Trie();
	for (int i=1;i<=n;i++){
		memset(str,'\0',sizeof(str));
		scanf("%s\n",&str);
		build(str);
	}
	scanf("%d\n",&m);
	Trie *pos;
	for (int i=1;i<=m;i++){
		sum=0;
		memset(str,'\0',sizeof(str));
		memset(ans,'\0',sizeof(ans));
		scanf("%s\n",&str);
		pos=New_Trie();
		pos=findTrie(str);
		dfs_print(pos,1);
		printf("\n");
	}
}
int main(){
	init_work();
	return 0;
}