记录编号 |
342954 |
评测结果 |
AAAAATTTTT |
题目名称 |
单词默写 |
最终得分 |
50 |
用户昵称 |
浮生随想 |
是否通过 |
未通过 |
代码语言 |
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);
}