「掘削」の問題解


タイトルの説明
N人の鉱夫が鉱山を掘っている.工場は事前にi番目の鉱夫にM[i]元の給料を支払って、彼は1トンの鉱山を掘るたびにK[i]元を消費しなければならなくて、もし彼の手元の残りのお金がK[i]元に足りないならば、彼は鉱山を掘ることを停止します.彼は1トンの鉱山を掘るたびに、工場はすぐに2元奨励します.奨励金は鉱山を掘る消費にも使われる.鉱夫の情報を提供して、鉱夫たちが全部で何トンの鉱山を掘ることができるか、どの鉱夫が掘る鉱山が一番多いかを計算してください.
入力フォーマット
1行目:1つの整数Nは、鉱夫の人数(1≦N≦70)の次の2 N行を表し、2行ごとに1人の鉱夫を記述する.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
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
%s"
,ans,Max.name); return 0; }