トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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型を使って、順に計算してます。