AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC364-C Minimum Glutton
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("4 7 18");
WillReturn.Add("2 3 5 1");
WillReturn.Add("8 8 1 4");
//2
}
else if (InputPattern == "Input2") {
WillReturn.Add("5 200000000000000 200000000000000");
WillReturn.Add("1 1 1 1 1");
WillReturn.Add("2 2 2 2 2");
//5
}
else if (InputPattern == "Input3") {
WillReturn.Add("8 30 30");
WillReturn.Add("1 2 3 4 5 6 7 8");
WillReturn.Add("8 7 6 5 4 3 2 1");
//6
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long[] wkArr = InputList[0].Split(' ').Select(pX => long.Parse(pX)).ToArray();
long X = wkArr[1];
long Y = wkArr[2];
long[] AArr = InputList[1].Split(' ').Select(pX => long.Parse(pX)).ToArray();
long[] BArr = InputList[2].Split(' ').Select(pX => long.Parse(pX)).ToArray();
AArr = AArr.OrderByDescending(pX => pX).ToArray();
BArr = BArr.OrderByDescending(pX => pX).ToArray();
var AnswerList = new List<long>();
AnswerList.Add(DeriveEatCnt(X, AArr));
AnswerList.Add(DeriveEatCnt(Y, BArr));
Console.WriteLine(AnswerList.Min());
}
static long DeriveEatCnt(long pSumLimit, long[] pArr)
{
long EacCnt = 0;
long CurrSum = 0;
for (long I = 0; I <= pArr.GetUpperBound(0); I++) {
EacCnt++;
CurrSum += pArr[I];
if (CurrSum > pSumLimit) {
break;
}
}
return EacCnt;
}
}
解説
パラメータ1を算数の得点
パラメータ2を国語の得点
にでも置き換え、
合計点が100を超えるのに、最適な取得順序を考えると
最適解は、
●算数の得点の降順に取得
●国語の得点の降順に取得
のどちらかとなります。
なのでこの2通りをナイーブに試せば良いです。