和map一个意思,写下字典树练手,输入有点恶心
#include<stdio.h>
#include<string.h>
#define MAXN 1000005
struct trie
{
int ch[MAXN][26];
int val[MAXN];
int sz;
void ini(){sz=1;memset(ch[0],0,sizeof(ch[0]));}
int getid(char c) {return c-'a';}
void insert(char *s,int v)
{
int len=strlen(s),pre=0,next;
for(int i=0;i<len;i++)
{
next=getid(s[i]);
if(!ch[pre][next])
{
memset(ch[sz],0,sizeof(ch[sz]));
val[sz]=0;
ch[pre][next]=sz++;
}
pre=ch[pre][next];
}
val[pre]=v;
}
int query(char *s)
{
int len=strlen(s),pre=0,next;
for(int i=0;i<len;i++)
{
next=getid(s[i]);
if(!ch[pre][next]) return 0;
pre=ch[pre][next];
}
return val[pre];
}
};
char map[100005][12];
char s[30];
trie t;
int main()
{
t.ini();
int n=1,i;
while(gets(s)&&strlen(s))
{
int len=strlen(s);
for(i=0;i<len;i++)
if(s[i]==' ')
{
s[i]='\0';
break;
}
sprintf(map[n],"%s",s);
t.insert(s+1+i,n++);
}
while(gets(s)&&strlen(s))
{
int id=t.query(s);
if(!id) printf("eh\n");
else printf("%s\n",map[id]);
}
return 0;
}