AtCoderのABC    次のABCの問題へ    前のABCの問題へ

ABC078-D ABS


問題へのリンク


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("3 100 100");
            WillReturn.Add("10 1000 100");
            //900
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("3 100 1000");
            WillReturn.Add("10 100 100");
            //900
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("5 1 1");
            WillReturn.Add("1 1 1 1 1");
            //0
        }
        else if (InputPattern == "Input4") {
            WillReturn.Add("1 1 1");
            WillReturn.Add("1000000000");
            //999999999
        }
        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 Z = wkArr[1];
        int W = wkArr[2];

        int[] AArr = InputList[1].Split(' ').Select(pX => int.Parse(pX)).ToArray();
        int UB = AArr.GetUpperBound(0);

        if (AArr.Length == 1) {
            long Answer = AArr[UB];
            Answer -= W;
            Console.WriteLine(Math.Abs(Answer));
            return;
        }

        var KouhoList = new List<long>();
        long Kouho1 = AArr[UB];
        Kouho1 -= W;
        KouhoList.Add(Math.Abs(Kouho1));

        long Kouho2 = AArr[UB];
        Kouho2 -= AArr[UB - 1];
        KouhoList.Add(Math.Abs(Kouho2));

        Console.WriteLine(KouhoList.Max());
    }
}


解説

Xの初期カードが1
Yの初期カードが2
として

10 90 70 50 30 20
というカード配置を考えます。

Xの初手の選択肢は
全部取るという選択
1つだけ残して、残りを取る選択
2つ以上残すという選択
がありますが、

2つ以上残すという選択は、
Yは最悪でも、Yのほうに1つだけ残して、残りを取る選択
があるので、

Xから見れば、
全部取るという選択
1つだけ残して、残りを取る選択
の2つで、スコアの高い方を選ぶのが最適です。