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