记录编号 102400 评测结果 AAAAAAAAAA
题目名称 [Youdao2010] 有道搜索框 最终得分 100
用户昵称 GravatarHouJikan 是否通过 通过
代码语言 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;
   }
}