靠靠靠昨天下午一直在写还是不知道哪里错了今天改了一下原来是数组开小了。。。。
字符串的题数组一定要开的很大很大啊。。。
#include<iostream>
#define MAX 10005
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,i,m;
struct trie
{
int ch[MAX][28];
int val[MAX];
int sz;
trie()
{
sz=0;
memset(ch[0],0,sizeof(ch[0]));
memset(val,false,sizeof(val));
}
int num(char cj)
{
return(cj-'a'+1);
}
void insert(string s,int value)
{
int len=s.length();
int u=0;
for(int i=0;i<len;i++)
{
int c=num(s[i]);
if(!ch[u][c])
{
memset(ch[sz],0,sizeof(ch[sz]));
ch[u][c]=++sz;
u=sz;
}
else
u=ch[u][c];
}
val[u]=value;
}
int ask(string s)
{
int len=s.length();
int u=0;
for(int i=0;i<len;i++)
u=ch[u][num(s[i])];
return val[u];
}
}wbysr;
int main()
{
string s1;
int v;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>s1;
scanf("%d",&v);
wbysr.insert(s1,v);
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
cin>>s1;
int ans=wbysr.ask(s1);
if (ans!=0)printf("%d\n",ans);
}
return 0;
}