AtCoderの企業コンテスト
次の企業コンテストの問題へ
前の企業コンテストの問題へ
パナソニックプログラミングコンテスト2020 B Bishop
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("4 5");
//10
}
else if (InputPattern == "Input2") {
WillReturn.Add("7 3");
//11
}
else if (InputPattern == "Input3") {
WillReturn.Add("1000000000 1000000000");
//500000000000000000
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long[] wkArr = InputList[0].Split(' ').Select(pX => long.Parse(pX)).ToArray();
long H = wkArr[0];
long W = wkArr[1];
if (H == 1 || W == 1) {
Console.WriteLine(1);
return;
}
// 1列目のビショップが移動可能なマス数
long Retu1Cnt = H / 2 + H % 2;
// 2列目のビショップが移動可能なマス数
long Retu2Cnt = H / 2;
// 列数の分の計上処理
long Answer = (W / 2) * (Retu1Cnt + Retu2Cnt);
if (W % 2 == 1) Answer += Retu1Cnt;
Console.WriteLine(Answer);
}
}
解説
列幅と縦幅の少なくとも片方が1なら、ビショップは移動できないので
最初に場合分けしてます。
後は、パリティを意識して、移動可能マスを計算してます。