记录编号 |
379184 |
评测结果 |
AAAAAAAEAE |
题目名称 |
查字典 |
最终得分 |
80 |
用户昵称 |
HeHe |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.524 s |
提交时间 |
2017-03-05 20:43:29 |
内存使用 |
51.81 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define is_num(tmp) (tmp<='9'&tmp>='0')
inline int in(void){
char tmp(getchar());
int res(0),f(1);
while(!(is_num(tmp)||tmp=='-'))tmp=getchar();
if(tmp=='-')f=-1,tmp=getchar();
while(is_num(tmp))
res=(res<<1)+(res<<3)+(tmp^48),
tmp=getchar();
return res*f;
}
struct NODE{
int page;
NODE *s[26];
NODE():page(-1){
memset(s,0,sizeof(s));
}
}root;
inline NODE *new_NODE(void){
static NODE ns[500000];
static int tot(0);
return ns+tot++;
}
void Push(const char* a,int n){
int l(0),r(strlen(a)),tmp;
NODE *now(&root);
while(l<r){
if(!now->s[tmp=a[l]-'a']){
now->s[tmp]=new_NODE();
}
now=now->s[tmp];
++l;
}
now->page=n;
return ;
}
int Find(const char* a){
int l(0),r(strlen(a));
NODE *now(&root);
while(l<r){
now=now->s[a[l]-'a'];
++l;
}
return now->page;
}
//#define LOCAL
char s[101];
int N,Q,tmp;
int main(){
#ifndef LOCAL
freopen("scanword.in","r",stdin);
freopen("scanword.out","w",stdout);
#endif
N=in();
for(int i=0;i<N;++i){
scanf("%s",s),tmp=in();
Push(s,tmp);
}
Q=in();
for(int i=0;i<Q;++i){
scanf("%s",s);
printf("%d\n",Find(s));
}
return 0;
}