记录编号 342954 评测结果 AAAAATTTTT
题目名称 单词默写 最终得分 50
用户昵称 Gravatar浮生随想 是否通过 未通过
代码语言 C++ 运行时间 5.224 s
提交时间 2016-11-08 20:37:21 内存使用 54.81 MiB
显示代码纯文本
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define maxn 100010
int n,m;
char pos[maxn*10];
struct node{
	int son[30],val;
}a[maxn*10];
int dfs(int x,int s){
	int res=0;
	for(int i=1;i<=a[x].son[0];i++)res+=dfs(a[x].son[i],s);
	if(a[x].val>=s){
		res++;
	}
	return res;
}
int main(){
	freopen("engzam.in","r",stdin);
	freopen("engzam.out","w",stdout);
	memset(a,0,sizeof a);
	scanf("%d%d",&n,&m);
	int p;
	int id=0;
	for(int i=1;i<=n;i++){
		int x;char s[20];
		scanf("%s%d",s+1,&x);
		int len=strlen(s+1);p=0;
		for(int j=1;j<=len;j++){
			bool flag=1;int k;
			for(k=1;k<=a[p].son[0]&&flag;k++)
				if(pos[a[p].son[k]]==s[j])flag=0;
			if(flag==0)p=a[p].son[k-1];
			else {
				a[p].son[++a[p].son[0]]=++id;
				pos[id]=s[j];p=id;
			}
			if(j==len)a[p].val+=x;
		}
	}
	for(int i=1;i<=m;i++){
		int x;char s[20];
		scanf("%s%d",s+1,&x);
		int len=strlen(s+1);p=0;
		for(int j=1;j<=len;j++){
			bool flag=1;int k;
			for(k=1;k<=a[p].son[0]&&flag;k++)
				if(pos[a[p].son[k]]==s[j])flag=0;
			if(flag==0)p=a[p].son[k-1];
			else {
				printf("0\n");
				break;
			}
			if(j==len)printf("%d\n",dfs(p,x));
			
		}
	}
	//while(2);
}