比赛 20120302 评测结果 AAAAAAAAAA
题目名称 有道搜索框 最终得分 100
用户昵称 Czb。 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-02 21:39:19
显示代码纯文本
#include<stdio.h>
#include<string.h>

struct Node
{
	bool Flag;
	Node *Next[26];
	Node()
	{
		Flag=false;
		for(int i=0;i<26;i++)
		{
			Next[i]=NULL;
		}
	}
};

int n,s,top;

char c[100],ans[100];

void dfs(Node *p)
{
	int i;
	if(p->Flag)
	{
		s++;
		printf("%s ",ans);
	}
	if(s==8)
	{
		return;
	}
	for(i=0;i<26;i++)
	{
		if(p->Next[i]!=NULL)
		{
			ans[++top]='a'+i;
			dfs(p->Next[i]);
			ans[top--]=0;
			if(s==8)
			{
				return;
			}
		}
	}
}

int main()
{
	freopen("youdao.in","r",stdin);
	freopen("youdao.out","w",stdout);
	int i,j,t,l;
	Node *Head=new Node;
	Node *p=new Node;
	scanf("%d\n",&n);
	for(i=1;i<=n;i++)
	{
		memset(c,0,sizeof(c));
		scanf("%s\n",&c);
		l=strlen(c);
		p=Head;
		for(j=0;j<l;j++)
		{
			t=c[j]-'a';
			if(p->Next[t]==NULL)
			{
				Node *q=new Node;
				p->Next[t]=q;
				q=NULL;
				delete q;
			}
			p=p->Next[t];
		}
		p->Flag=true;
	}
	scanf("%d\n",&n);
	for(i=1;i<=n;i++)
	{
		memset(c,0,sizeof(c));
		scanf("%s\n",&c);
		l=strlen(c);
		p=Head;
		for(j=0;j<l;j++)
		{
			ans[j]=c[j];
			t=c[j]-'a';
			if(p->Next[t]==NULL)
			{
				printf("%s\n",c);
				goto l1;
			}
			p=p->Next[t];
		}
		s=0;
		top=l-1;
		dfs(p);
		printf("\n");
		l1:memset(ans,0,sizeof(ans));
	}
	return 0;
}