记录编号 377346 评测结果 AAAAAAAEAE
题目名称 查字典 最终得分 80
用户昵称 GravatarHeHe 是否通过 未通过
代码语言 C++ 运行时间 0.780 s
提交时间 2017-03-01 11:02:12 内存使用 0.43 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
struct NODE{
	int page;
	int s[26];
	NODE():page(-1){
		memset(s,0,sizeof(s));
	}
};
class tree{
private:
	vector<NODE>k;
	int new_node(){
		static int tot=0;
		static NODE N;
		k.push_back(N);
		return tot++;
	}
public:
	tree(){
		new_node();
	}
	void push(const char *a,const int&num){
		int i(0),now(0),d;
		while(a[i]!='\0'){
			if(!k[now].s[a[i]-'a']){
				d=new_node();
				k[now].s[a[i]-'a']=d;
			}
			else{
				d=k[now].s[a[i]-'a'];
			}
			now=d;++i;
		}
		k[now].page=num;
	}
	int find(const char *a){
		int i=0,now=0;;
		while(a[i]!='\0'){
			now=k[now].s[a[i]-'a'];
			++i;
		}
		return k[now].page;
		
	}
}dic;
char s[123456];
int page;
int main(){
	freopen("scanword.in","r",stdin);
	freopen("scanword.out","w",stdout);
	int n;
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>s>>page;
		dic.push(s,page);
	}
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>s;
		cout<<dic.find(s)<<'\n';
	}
}