记录编号 472779 评测结果 EEEEEEEEEE
题目名称 单词默写 最终得分 0
用户昵称 Gravatarswttc 是否通过 未通过
代码语言 C++ 运行时间 0.000 s
提交时间 2017-11-07 20:49:55 内存使用 0.00 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>

using namespace std;

int n,m,cnt;
vector<int>sum[1000010];

struct nodes
{
	int val;
	char s[13];
	bool operator < (const nodes & b) const{
		return val<b.val;
	}
}av[100010];

struct tree
{
	int ch[26];
}trie[1000010];

void inser(char *s,int vall)
{
	int l=strlen(s+1),u=0;
	for(int i=1;i<=l;i++){
		int num=(int)(s[i]-'a');		
		if(!trie[u].ch[num]){
			cnt++;
			trie[u].ch[num]=cnt;
			u=cnt;
		}
		else u=trie[u].ch[num];//cout<<u;
		sum[u].push_back(vall);
	}
	return;
}

int query(char *s,int vall)
{
	int l=strlen(s+1),u=0;
	for(int i=1;i<=l;i++){
		int num=(int)(s[i]-'a');		
		if(!trie[u].ch[num]) return 0;
		else u=trie[u].ch[num];
	}//cout<<u<<" "<<trie[u].sum.size()<<endl;
	int ll=0,rr=sum[u].size();
	while(ll!=rr){
		int mid=ll+rr>>1;
		if(sum[u][mid]<vall) ll=mid+1;
		else rr=mid;
	}
	return sum[u].size()-ll;
}

int main()
{
	freopen("engzam.in","r",stdin);
	freopen("engzam.out","w",stdout);
//	cout<<(sizeof(trie)+sizeof(av))/1024/1024<<endl;cout<<"A";
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%s%d",av[i].s+1,&av[i].val);
	sort(av+1,av+n+1);
	for(int i=1;i<=n;i++) inser(av[i].s,av[i].val);
	for(int i=1;i<=m;i++){
		char c[13];
		int valll;
		scanf("%s%d",c+1,&valll);
		printf("%d\n",query(c,valll));
	}
	return 0;
 }