字典树基础题。就是读入比较蛋疼。
AC代码:
#include<cstdio>
#include<ctype.h>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
#include<cstdlib>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<ctime>
#include<string.h>
#include<string>
using namespace std;
#define ll __int64
struct Trie
{
int ch[1000005][26];
int val[1000005];
int sz;
Trie(){sz = 1; memset(ch[0],0,sizeof(ch[0]));}
void clear(){sz = 1; memset(ch[0],0,sizeof(ch[0]));}
int idx(char c){return c-'a';}
void insert(char *s,int k)
{
int u = 0,n = strlen(s);
for(int i = 0; i < n; i++)
{
int c = idx(s[i]);
if(!ch[u][c])
{
memset(ch[sz],0,sizeof(ch[sz]));
val[sz] = 0;
ch[u][c]=sz++;
}
u = ch[u][c];
}
val[u] = k;
}
int query(char *s)
{
int u = 0,n = strlen(s);
for(int i = 0; i < n; i++)
{
int c = idx(s[i]);
if(!ch[u][c]) return 0;
u = ch[u][c];
}
return val[u];
}
};
Trie T;
char a[100005][15];
int main()
{
#ifdef GLQ
freopen("input.txt","r",stdin);
// freopen("o.txt","w",stdout);
#endif // GLQ
char temp[30];
int i,n=1;
while(gets(temp)&&temp[0]!='\0')
{
sscanf(temp,"%s %s",a[n],temp);
T.insert(temp,n);
n++;
}
while(gets(temp)&&temp[0]!='\0')
{
int ans = T.query(temp);
if(ans == 0) printf("eh\n");
else printf("%s\n",a[ans]);
}
return 0;
}