题目描述
在游戏《进化!宝可梦》中,Mirko 拥有 n 只宝可梦。为了完成对它们的进化,Mirko 为第i 只宝可梦准备了 m_i 颗糖果。
每次进化第 i 只宝可梦,都需要消耗 k_i 颗为其准备的糖果。进化完成后,Mirko 将获得 2 颗相应的糖果作为奖励。需要注意,所有宝可梦都只能使用相应的糖果进行进化。
Mirko 想知道他总共能完成多少次对宝可梦的进化,并找出进化次数最多的一只宝可梦。如果进化次数最多的宝可梦不唯一,请选择更早在输入中出现的那一只。
输入格式
第一行一个整数 n。
接下来 2×n 行:
第 2×i 行一个字符串,表示 Mirko 的第 i 只宝可梦的名字。
第 2×i+1 行两个整数 k_i,m_i。
输出格式
第一行一个整数,表示 Mirko 能完成对宝可梦进化的总次数。
第二行一个字符串,表示进化次数最多的宝可梦的名字。
输入
4
Caterpie
12 33
Weedle
12 42
Pidgey
12 47
Rattata
25 71
输出
14
Weedle
输入
7
Bulbasaur
25 74
Ivysaur
100 83
Charmander
25 116
Charmeleon
100 32
Squirtle
25 1
Wartortle
100 173
Pikachu
50 154
输出
11
Charmander
思路
求出每一只的进化次数,求最大的并求和,那么我们怎么求进化次数呢?很简单,设z为第i只糖果数,y为进化所需糖果数,那么代码如下:
while (z>=y)
{
int p=z/y;
z=z-p*y+p*2;
o+=p;
}
o为进化次数
code:
#include<iostream>
#include<algorithm>
#include<map>
#include<cstdio>
using namespace std;
int s,mx;
string u;
int main()
{
int n;
cin>>n;
for (int i=1;i<=n;i++)
{
string x;
int y,z;
cin>>x>>y>>z;
int o=0;
while (z>=y)
{
int p=z/y;
z=z-p*y+p*2;
o+=p;
}
s+=o;
if (o>mx)
{
mx=o;
u=x;
}
}
cout<<s<<endl<<u;
return 0;
}