AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC160-E Red and Green Apples
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("1 2 2 2 1");
WillReturn.Add("2 4");
WillReturn.Add("5 1");
WillReturn.Add("3");
//12
}
else if (InputPattern == "Input2") {
WillReturn.Add("2 2 2 2 2");
WillReturn.Add("8 6");
WillReturn.Add("9 1");
WillReturn.Add("2 1");
//25
}
else if (InputPattern == "Input3") {
WillReturn.Add("2 2 4 4 4");
WillReturn.Add("11 12 13 14");
WillReturn.Add("21 22 23 24");
WillReturn.Add("1 2 3 4");
//74
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = InputList[0].Split(' ').Select(pX => int.Parse(pX)).ToArray();
int X = wkArr[0];
int Y = wkArr[1];
int[] RedAppleArr = InputList[1].Split(' ').Select(pX => int.Parse(pX)).ToArray();
int[] GreenAppleArr = InputList[2].Split(' ').Select(pX => int.Parse(pX)).ToArray();
int[] WhiteAppleArr = InputList[3].Split(' ').Select(pX => int.Parse(pX)).ToArray();
RedAppleArr = RedAppleArr.OrderByDescending(pX => pX).Take(X).ToArray();
GreenAppleArr = GreenAppleArr.OrderByDescending(pX => pX).Take(Y).ToArray();
var AnswerList = new List<int>();
AnswerList.AddRange(RedAppleArr);
AnswerList.AddRange(GreenAppleArr);
AnswerList.AddRange(WhiteAppleArr);
var Query = AnswerList.OrderByDescending(pX => pX).Take(X + Y);
long Answer = 0;
foreach (var EachItem in Query) {
Answer += EachItem;
}
Console.WriteLine(Answer);
}
}
解説
赤リンゴからは最大でX個とるので
美味しさの降順でX番目以降は、捨てます。
緑リンゴからは最大でY個とるので
美味しさの降順でY番目以降は、捨てます。
それから無色リンゴを混ぜて、降順に
(X+Y)個のリンゴを選べば、解になります。