トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

ARC-034-A 首席

■■■問題■■■

N人の人が高橋大学の入学試験を受けた。
試験には「国語」「数学」「理科」「英語」「塗り絵」の5科目がある。
各受験生について、その人の「国語」「数学」「理科」「英語」の4科目の得点の合計に、
「塗り絵」の得点の 110/900 倍を加えたものがその人の最終得点となる。

各受験生の各試験の得点が与えられる。N人のうち最も最終得点が高い受験生の最終得点を求めよ。

■■■入力■■■

N
a1 b1 c1 d1 e1
a2 b2 c2 d2 e2
・
・
・
aN bN cN dN eN

●1行目には、高橋大学の受験生の数を表す1個の整数 N (2 <= N <= 3049) が与えられる。
●2行目から N+1 行目までのN行には、各受験生の各試験の得点が与えられる。
  i+1 行目には、i番目の受験生の「国語」「数学」「理科」「英語」「塗り絵」の得点を
  それぞれ表す5個の整数 ai, bi, ci, di, ei
  (各 1 <= i <= N に対し
      0 <= ai <= 80, 0 <= bi,ci,di <= 120, 731 <= ei <= 900)
  がスペース区切りで与えられる。

■■■出力■■■

N人のうち最も最終得点が高い受験生の最終得点を1行目に出力せよ。
審判の出力との絶対誤差が0.0001以下であるとき正答とみなされる。
末尾の改行を忘れないこと。


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "InputX";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("2");
            WillReturn.Add("37 54 68 66 802");
            WillReturn.Add("58 108 106 103 871");
            //481.4555555555555555
            //1番目の受験生の最終得点は
            //37+54+68+66+802×110/900=323.02222・・・点であり、
            //2番目の受験生の最終得点は 
            //58+108+106+103+871×110/900=481.45555・・・点である。
            //2番目の受験生の最終得点を出力すればよい。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("2");
            WillReturn.Add("80 120 120 120 900");
            WillReturn.Add("0 0 0 0 731");
            //550
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();

        decimal Answer = 0M;
        foreach (string EachStr in InputList.Skip(1)) {
            int[] wkArr = EachStr.Split(' ').Select(X => int.Parse(X)).ToArray();
            int a = wkArr[0];
            int b = wkArr[1];
            int c = wkArr[2];
            int d = wkArr[3];
            int e = wkArr[4];

            decimal CurrScore = a + b + c + d + e * 110M / 900M;
            if (Answer < CurrScore) Answer = CurrScore;
        }
        Console.WriteLine(Answer);
    }
}


解説

Decimal型を使って、順に計算してます。