记录编号 | 472569 | 评测结果 | EEEEEEEEEE | ||
---|---|---|---|---|---|
题目名称 | 单词默写 | 最终得分 | 0 | ||
用户昵称 | 是否通过 | 未通过 | |||
代码语言 | C++ | 运行时间 | 0.000 s | ||
提交时间 | 2017-11-07 19:31:11 | 内存使用 | 0.00 MiB | ||
#include<bits/stdc++.h> using namespace std; const int maxn=100004; int ch[maxn*10][26],n,m,tot; vector<int>f[maxn*10]; struct gg{ int val; char s[11]; void read(){ scanf("%s%d",s,&val); } bool operator < (const gg &o)const{ return val<o.val; } }p[maxn]; void insert(char s[],int x){ int now=0,len=strlen(s); for(int i=0;i<len;i++){ int o=s[i]-'a'; if(!ch[now][o])ch[now][o]=++tot; now=ch[now][o]; f[now].push_back(x); } } int q(char s[],int x){//if(x!=3)return 0; int now=0,len=strlen(s); for(int i=0;i<len;i++){ int o=s[i]-'a'; if(!ch[now][o])return 0; now=ch[now][o]; } int l=0,r=f[now].size()-1;//printf("%d\n",f[now].size()); while(l!=r){ int mid=(l+r)>>1; if(f[now][mid]<x)l=mid+1; else r=mid; } if(f[now][l]<x)return 0; return f[now].size()-l; } int main() { freopen("engzam.in","r",stdin); freopen("engzam.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)p[i].read(); sort(p+1,p+n+1); for(int i=1;i<=n;i++)insert(p[i].s,p[i].val); // for(int i=1;i<=tot;i++)printf("%d\n",f[i].size()); for(int i=1;i<=m;i++){ char s[11]; int l; scanf("%s%d",s,&l); printf("%d\n",q(s,l)); } return 0; }