记录编号 |
102400 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[Youdao2010] 有道搜索框 |
最终得分 |
100 |
用户昵称 |
HouJikan |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.072 s |
提交时间 |
2014-05-18 22:25:31 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <ctime>
using namespace std;
struct node
{
node *next[26];
bool end;
char word[30];
node ()
{
this->end=false;
for(int a=0;a<26;a++)
this->next[a]=NULL;
}
};
void print(node *now,int &cnt);
int main()
{
freopen("youdao.in","r",stdin);
freopen("youdao.out","w",stdout);
node *root=new node;
int n;
cin>>n;
char words[30];
node *p;
for(int a=1;a<=n;a++)
{
scanf("%s",words);
int len=strlen(words);
p=root;
for(int i=0;i<len;i++)
{
if (p->next[words[i]-'a']==NULL)
p->next[words[i]-'a']=new node;
p=p->next[words[i]-'a'];
}
p->end=true;
strcpy(p->word,words);
}
int q;
cin>>q;
for(int a=1;a<=q;a++)
{
scanf("%s",words);
int len=strlen(words);
p=root;
bool suc=true;
for(int i=0;i<len;i++)
{
if (p->next[words[i]-'a']==NULL)
{
suc=false;
break;
}
p=p->next[words[i]-'a'];
}
if (!suc)
{
printf("%s\n",words);
continue;
}
int cnt=0;
print(p,cnt);
printf("\n");
}
return 0;
}
//===============================================
void print(node *now,int &cnt)
{
if (cnt==8)
return;
if (now->end)
{
printf("%s ",now->word);
cnt++;
}
for(int a=0;a<26;a++)
{
if (now->next[a]!=NULL)
print(now->next[a],cnt);
if (cnt==8)
return;
}
}