题目1416:猴子吃坚果
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1192
解决:406
-
题目描述:
-
动物园的猴子吃坚果的顺序都是按强壮程度来定的,最强壮的吃完才能轮到下一个,现在我们给出各个猴子的名字,强壮程度,吃饱的量,然后查询对应的猴子必须要扔多少坚果才可以轮到。
-
输入:
-
输入有多组,对于每组输入:
输入的第一行包括两个整数n(1<=n<=10000),代表动物园中猴子的个数,以及m(1<=m<=10000),代表我们要查询的次数。
接下来的n行,每行包括一个字符串(代表猴子的名字,长度1<=len<=100),一个整数a(1<=a<=10000),代表猴子的强壮程度,一个整数b(1<=b<=10000),代表猴子吃饱所需要的食物量。
-
输出:
-
对于每次查询,输出最少需要多少食物,被查询的这只猴子才能吃到食物。
-
样例输入:
-
3 2monkey_a 4 2monkey_b 3 4monkey_c 5 3monkey_amonkey_c4 2monkey_a 4 2monkey_b 3 4monkey_c 5 3monkey_d 5 3monkey_amonkey_c
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct monkey
{
char name[110];
int a;
int b;
bool operator < (const monkey &A) const{
if(a!=A.a)
return a>A.a;
else
{
int cmp=strcmp(name,A.name);
return cmp<0;
}
}
}mon[10001];
int main()
{
int n,m;
int i;
while(scanf("%d %d",&n,&m )!=EOF)
{
for(i=0;i<n;++i)
scanf("%s %d %d",mon[i].name,&mon[i].a,&mon[i].b);
sort(mon,mon+n);
while(m--){
int ans=0;
char name_mon[110];
scanf("%s",name_mon);
for(i=0;i<n;++i){
if(strcmp(name_mon,mon[i].name)!=0)
ans+=mon[i].b;
else
{
printf("%d\n",ans+1 );
break;
}
}
}
}
return 0;
}
-
样例输出:
-
4171
-
提示:
-
如果有两只猴子的强壮程度相同,就按照猴子名字的字母序来决定吃食物的先后顺序。
-
-
本以为会RE,但是发现够大;解法常规
-