记录编号 35792 评测结果 AAAAAAAAAA
题目名称 [Youdao2010] 有道搜索框 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.461 s
提交时间 2012-03-02 22:15:02 内存使用 0.53 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

struct wordtype
{
	int len;
	char ch[23];
}word[10002];
wordtype question;
bool flag;

void swap(wordtype &x,wordtype &y)
{
	wordtype temp;
	temp=x;
	x=y;
	y=temp;
}

void qqsort(int l,int r)
{
	int ll,rr;
	wordtype temp;
	ll=l;
	rr=r;
	temp=word[rand()%(r-l+1)+l];
	while (ll<=rr)
	{
		while (strcmp(word[ll].ch,temp.ch)<0)
			ll++;
		while (strcmp(word[rr].ch,temp.ch)>0)
			rr--;
		if (ll<=rr)
		{
			swap(word[ll],word[rr]);
			ll++;
			rr--;
		}
	}
	if (l<rr)
		qqsort(l,rr);
	if (ll<r)
		qqsort(ll,r);
}

void cap(int l,int r,int deep)
{
	int i;
	if (question.len<deep)
	{
		int c=0;
		bool flag2=false;
		for (i=l;c<8&&i<=r;i++,c++)
		{
			flag=true;
			if (c==7||i==r)
			{
				flag2=true;
				break;
			}
			printf("%s ",word[i].ch);
		}
		if (flag2)
			printf("%s",word[i].ch);
		return;
	}
	int ll=l,rr=r;
	for (i=l;i<=r;i++)
		if (question.ch[deep-1]==word[i].ch[deep-1])
			break;
	ll=i;
	for (;i<=r;i++)
	{
		if (question.ch[deep-1]!=word[i].ch[deep-1])
			break;
	}
	rr=i-1;
	if (ll<=rr)
		cap(ll,rr,deep+1);
}

int main(void)
{
	freopen("youdao.in","r",stdin);
	freopen("youdao.out","w",stdout);
	int i,j,n=0,q/*,pos*/;
	scanf("%d\n",&n);
	if (n==0)
		return(0);
	for (i=0;i<n;i++)
	{
//		pos=0;
//		flag=true;
//		while (flag)
//		{
//			cin.get(word[i].ch[pos]);
//			if (word[i].ch[pos]=='\n')
//				flag=false;
//			if (word[i].ch[pos]=='\n'||(word[i].ch[pos]>='a'&&word[i].ch[pos]<='z'))
//				pos++;
//		}
//		word[i].ch[pos-1]=0;
		scanf("%s\n",word[i].ch);
		word[i].len=strlen(word[i].ch);
	}
	qqsort(0,n-1);
	for (i=n-1;i>=1;i--)
		if (strcmp(word[i].ch,word[i-1].ch)==0)
		{
			for (j=i+1;j<n;j++)
				word[j-1]=word[j];
			n--;
		}
	scanf("%d\n",&q);
	for (i=0;i<q;i++)
	{
//		pos=0;
//		flag=true;
//		while (flag)
//		{
//			cin.get(question.ch[pos]);
//			if (question.ch[pos]=='\n')
//				flag=false;
//			if (question.ch[pos]=='\n'||(question.ch[pos]>='a'&&question.ch[pos]<='z'))
//				pos++;
//		}
//		question.ch[pos-1]=0;
		scanf("%s\n",question.ch);
		question.len=strlen(question.ch);
		flag=false;
		cap(0,n-1,1);
		if (!flag)
			printf("%s",question.ch);
		printf("\n");
	}
	return(0);
}