比赛 |
20120302 |
评测结果 |
AAAAAAAAAA |
题目名称 |
有道搜索框 |
最终得分 |
100 |
用户昵称 |
QhelDIV |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-03-02 21:28:35 |
显示代码纯文本
#include <fstream>
using namespace std;
ifstream fin("youdao.in");
ofstream fout("youdao.out");
string S[10001],T[10001];
int N,Q,L[10001],OT;
class Node
{
public:
int AT,Index;
Node *son[27];
Node *New()
{
Node *newp=new Node;
newp->AT=0;
for(int i=1;i<=26;i++)
newp->son[i]=0;
return newp;
}
}Root;
Node *Add(Node *p,char ch)
{
if(p->son[ch-'a'+1])
return p->son[ch-'a'+1];
else
{
p->son[ch-'a'+1]=p->New();
p=p->son[ch-'a'+1];
return p;
}
}
void Ins(int pos)
{
int i;
Node *p=&Root;
for(i=0;i<L[pos];i++)
p=Add(p,S[pos][i]);
p->Index=pos;
p->AT++;
}
void Initialize()
{
int i;
fin>>N;
for(i=1;i<=N;i++)
{
fin>>S[i];
L[i]=S[i].length();
Ins(i);
}
}
Node *Que(Node *p,char ch)
{
if(p->son[ch-'a'+1])
return p->son[ch-'a'+1];
else
return 0;
}
void Op(Node *p)
{
int i;
if(p->AT > 0 && OT<8)
{
fout<<S[p->Index]<<" ";
OT++;
}
for(i=1;i<=26;i++)
if(p->son[i])
Op(p->son[i]);
}
void Search_Op(int pos)
{
int i;
Node *p=&Root;
for(i=0;i<L[pos];i++)
{
p=Que(p,T[pos][i]);
if(p==0)
break;
}
OT=0;
if(p==0)
fout<<T[pos];
else
Op(p);
fout<<endl;
}
void Ans()
{
int i;
fin>>Q;
for(i=1;i<=Q;i++)
{
fin>>T[i];
L[i]=T[i].length();
Search_Op(i);
}
}
int main()
{
Initialize();
Ans();
fin.close();
fout.close();
return 0;
}