AtCoderのARC    次のARCの問題へ    前のARCの問題へ

ARC203-A All Winners


問題へのリンク


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("2");
            WillReturn.Add("3 3");
            WillReturn.Add("5 1");
            //4
            //1
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static long[] GetSplitArr(string pStr)
    {
        return (pStr == "" ? new string[0] : pStr.Split(' ')).Select(pX => long.Parse(pX)).ToArray();
    }

    static void Main()
    {
        List<string> InputList = GetInputList();

        long[] wkArr = { };
        Action<string> SplitAct = (pStr) => wkArr = GetSplitArr(pStr);

        foreach (string EachStr in InputList.Skip(1)) {
            SplitAct(EachStr);
            long N = wkArr[0];
            long M = wkArr[1];

            long BaseWin = M / 2;
            if (M % 2 == 0) {
                Console.WriteLine(N * BaseWin);
            }
            else {
                Console.WriteLine(N * BaseWin + 1);
            }
        }
    }
}


解説

10チームいて、各チームにつき4人いる場合で考えます。
○○○○○○○○○○
○○○○○○○○○○
○○○○○○○○○○
○○○○○○○○○○

各チームごとに
必ず勝つ人を2人する設定は、実現可能です。
必ず勝つ人を3人する設定は、実現不可です。

次に、10チームいて、各チームにつき5人いる場合で考えます。
○○○○○○○○○○
○○○○○○○○○○
○○○○○○○○○○
○○○○○○○○○○
○○○○○○○○○○

各チームごとに
必ず勝つ人を2人する設定は、実現可能です。
必ず勝つ人を3人する設定は、実現不可ですが、1チームだけは、この設定が可能です。

以上により、Mの偶数奇数で場合分けして、
解くことができると分かります。

Mが偶数の場合、(M/2) * N
Mが奇数の場合、(M/2) * N + 1