P6494 [COCI2016-2017#2] Go

题目描述

在游戏《进化!宝可梦》中,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
#include
#include
#include
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;
}

你可能感兴趣的:(P6494 [COCI2016-2017#2] Go)