比赛 |
2024暑假C班集训8 |
评测结果 |
AAAAAEEEEE |
题目名称 |
单词默写 |
最终得分 |
50 |
用户昵称 |
小金 |
运行时间 |
1.268 s |
代码语言 |
C++ |
内存使用 |
32.43 MiB |
提交时间 |
2024-07-08 11:54:07 |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int n,m,p,l,ans,cnt,i;
string s;
struct tree{int flag,son[30];}t[500001];
int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void build(int at,int now){
if(now==s.length()){
t[at].flag+=p;
return;
}
int num=s[now]-'a';
if(!t[at].son[num])t[at].son[num]=++cnt;
build(t[at].son[num],now+1);
return;
}
void find(int at){
if(t[at].flag>=l)ans++;
for(int j=0;j<26;j++)if(t[at].son[j])find(t[at].son[j]);
}
void query(int at,int now){
if(now==s.length()){
find(at);
return;
}
int num=s[now]-'a';
if(!t[at].son[num])return;
query(t[at].son[num],now+1);
return;
}
int main(){
freopen("engzam.in","r",stdin);
freopen("engzam.out","w",stdout);
n=read(),m=read();
for(int i=1;i<=n;i++){
cin>>s;p=read();
build(0,0);
}
for(int i=1;i<=m;i++){
ans=0;
cin>>s;l=read();
query(0,0);
printf("%d\n",ans);
}
return 0;
}