#include<bits/stdc++.h>
using namespace std;
int n, k, cnt = 0;
const int mod = 1e5+7;
int head[mod];
struct Node{
char name[20];
int sc, next;
Node(){
sc = 0;
}
}p[mod];
int Hash(char* s){
int hs = 0, i;
for( i = 0; i < 17; i++){
hs = (hs*10 + s[i]-'0')%mod;
}
if(s[i]=='x') hs = (hs*10 + 11)%mod;
else hs = (hs*10 + s[i]-'0')%mod;
return hs;
}
int main(){
char s[20]; int num;
memset(head, -1, sizeof(head));
scanf("%d%d",&n,&k);getchar();
for(int i = 0; i < n; i++){
scanf("%s%d",s, &num);getchar();
int hs = Hash(s);
if(num<=k) num = k;
int flag = 0;
for(int i = head[hs]; i!=-1; i = p[i].next){
if(strcmp(p[i].name, s)==0){
p[i].sc += num; flag =1;
break;
}
}
if(!flag){//第一次出现
p[cnt].sc += num;
for(int i = 0; i < 18; i++)
p[cnt].name[i] = s[i];
p[cnt].next = head[hs];//head[hs] = -1
head[hs] = cnt++;
}
}
int t;
scanf("%d",&t);getchar();
while(t--){
scanf("%s",s);
int hs = Hash(s), flag = 0;
for(int i = head[hs]; i != -1; i = p[i].next){//此时head[hs]所指向的必然是最后一个元素 一直遍历到第一次出现时
if(strcmp(s, p[i].name)==0){
printf("%d\n",p[i].sc); flag = 1;
break;
}
}
if(!flag) printf("No Info\n");
}
//system("pause");
return 0;
}
仅供参考 切勿抄袭
hang hang hang !!!