“挖矿”题解

题目描述

有N名矿工在挖矿。工厂预先给第i名矿工支付了M[i]元工资,他每挖一吨矿需要消费K[i]元,如果他手头余下的钱不足K[i]元,他就停止挖矿。他每挖一吨矿,工厂会立即奖励他2元钱。奖励的钱也可以用 于挖矿的消费。
给出矿工的信息,请你计算一下矿工们总共可以挖出多少吨矿,以及哪个矿工挖的矿最多。

输入格式

第1行:1个整数N,表示矿工的人数(1 ≤ N ≤ 70)
接下来2N行,每2行描述1名矿工。第1行是一字符串(长度不超过20个字符),表示矿工的姓名,第2行 2个整数,分别表示K (12 ≤ K ≤ 400)和M (1 ≤ M ≤ 10000)

输出格式

第1行:1个整数,表示矿工们总共可以挖出多少吨矿
第2行:1个字符串,表示挖矿最多的矿工的姓名。如果多个矿工挖得一样多,输出最靠前的1个人。

样例

样例1输入
4
Caterpie
12 33
Weedle
12 42
Pidgey
12 47
Rattata
25 71
样例1输出
14
Weedle

分析

这是一道很简单的 模拟

AC代码+注释

#include<bits/stdc++.h>
using namespace std;

long long n,ans;
struct node
{
 char name[25];
 long long k,m,sum;
 //sum用来计挖出的矿的吨数 
}a[75],Max;
//结构体数组

int main()
{
 scanf("%lld",&n);
 Max.sum=0;
 for(long long i=1;i<=n;i++)
 {
  scanf("%s%lld%lld",a[i].name,&a[i].k,&a[i].m);
  a[i].sum=0;
  for(;a[i].m>=a[i].k;a[i].m+=2-a[i].k)
  //手头余下的钱够k[i]元,挖矿后工厂会奖励2元,还要一份矿需要的钱 
  {
   a[i].sum++;
   //多挖了1吨矿
   ans++;
   //ans表示矿工们总共可以挖出多少吨矿 
  }
  if(a[i].sum>Max.sum)
  {
   Max=a[i];
  }
  //挖矿最多的矿工 
 }
 printf("%lld\n%s",ans,Max.name);
 return 0;
}

猜你喜欢

转载自blog.csdn.net/cqbzybc20220707/article/details/107641709