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つしか進めることができなくて
全ての仕事がいつでも着手可能なので

締切の昇順にソートして、貪欲法を使ってます。