记录编号 |
472404 |
评测结果 |
EEEEEEEEEE |
题目名称 |
单词默写 |
最终得分 |
0 |
用户昵称 |
Fisher. |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2017-11-07 16:56:22 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int maxn=100010;
const int maxsize=1000010;
int n,m;
struct dd{
char s[11];
int val;
}data[maxn];
inline bool cmp(dd a,dd b){
return a.val<b.val;
}
vector<int>son[maxsize];
int t[maxsize][26];
int sz;
inline void insert(char *s,int v){
int len=strlen(s),u=0;
for(int i=0;i<len;i++){
int to=s[i]-'a';
if(!t[u][to]){
t[u][to]=++sz;
}
u=t[u][to];
son[u].push_back(v);
}
}
inline int find(char *s){
int len=strlen(s),u=0;
for(int i=0;i<len;i++){
int to=s[i]-'a';
if(!t[u][to])return 0;
else u=t[u][to];
}
return u;
}
int main(){
freopen("engzam.in","r",stdin);
freopen("engzam.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s%d",data[i].s,&data[i].val);
}
sort(data+1,data+n+1,cmp);
for(int i=1;i<=n;i++){
insert(data[i].s,data[i].val);
}
for(int i=1;i<=m;i++){
char c[11];
int lim;
scanf("%s%d",c,&lim);
int id=find(c);
vector<int>::iterator pos=lower_bound(son[id].begin(),son[id].end(),lim);
if(pos==son[id].end()){
puts("0");
continue;
}
else{
printf("%d\n",son[id].end()-pos);
}
}
return 0;
}