AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC131-D Megalomania
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("5");
WillReturn.Add("2 4");
WillReturn.Add("1 9");
WillReturn.Add("1 8");
WillReturn.Add("4 9");
WillReturn.Add("3 12");
//Yes
}
else if (InputPattern == "Input2") {
WillReturn.Add("3");
WillReturn.Add("334 1000");
WillReturn.Add("334 1000");
WillReturn.Add("334 1000");
//No
}
else if (InputPattern == "Input3") {
WillReturn.Add("30");
WillReturn.Add("384 8895");
WillReturn.Add("1725 9791");
WillReturn.Add("170 1024");
WillReturn.Add("4 11105");
WillReturn.Add("2 6");
WillReturn.Add("578 1815");
WillReturn.Add("702 3352");
WillReturn.Add("143 5141");
WillReturn.Add("1420 6980");
WillReturn.Add("24 1602");
WillReturn.Add("849 999");
WillReturn.Add("76 7586");
WillReturn.Add("85 5570");
WillReturn.Add("444 4991");
WillReturn.Add("719 11090");
WillReturn.Add("470 10708");
WillReturn.Add("1137 4547");
WillReturn.Add("455 9003");
WillReturn.Add("110 9901");
WillReturn.Add("15 8578");
WillReturn.Add("368 3692");
WillReturn.Add("104 1286");
WillReturn.Add("3 4");
WillReturn.Add("366 12143");
WillReturn.Add("7 6649");
WillReturn.Add("610 2374");
WillReturn.Add("152 7324");
WillReturn.Add("4 7042");
WillReturn.Add("292 11386");
WillReturn.Add("334 5720");
//Yes
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
struct TaskDef
{
internal int A;
internal int B;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = { };
Action<string> SplitAct = pStr =>
wkArr = pStr.Split(' ').Select(X => int.Parse(X)).ToArray();
var TaskList = new List<TaskDef>();
foreach (string EachStr in InputList.Skip(1)) {
SplitAct(EachStr);
TaskDef WillAdd;
WillAdd.A = wkArr[0];
WillAdd.B = wkArr[1];
TaskList.Add(WillAdd);
}
int CurrTime = 0;
foreach (TaskDef EachTask in TaskList.OrderBy(pX => pX.B)) {
CurrTime += EachTask.A;
if (CurrTime > EachTask.B) {
Console.WriteLine("No");
return;
}
}
Console.WriteLine("Yes");
}
}
解説
1つしか進めることができなくて
全ての仕事がいつでも着手可能なので
締切の昇順にソートして、貪欲法を使ってます。