AtCoderのARC
次のARCの問題へ
前のARCの問題へ
ARC152-A Seat Occupation
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 4");
WillReturn.Add("2 2");
//No
}
else if (InputPattern == "Input2") {
WillReturn.Add("3 4");
WillReturn.Add("1 2 1");
//Yes
}
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 N = wkArr[1];
int[] AArr = InputList[1].Split(' ').Select(pX => int.Parse(pX)).ToArray();
int FillAreaSum = 0;
foreach (int EachA in AArr) {
if (EachA == 1) {
FillAreaSum += 2;
}
if (EachA == 2) {
int Rest = N - FillAreaSum;
Rest = Math.Max(0, Rest);
if (Rest < 2) {
Console.WriteLine("No");
return;
}
FillAreaSum += 2 + 1;
}
}
Console.WriteLine("Yes");
}
}
解説
1人組は必ず座れます。
2人組が座れないかの判定は、前に座った人が最悪の座り方をしたとして、
座れるかを判定すれば良いです。
1人組の最悪の座り方は、
1マス空けて座る場合です。
□1
同じく
2人組の最悪の座り方は、
1マス空けて座る場合です。
□22
例えば
1人組、2人組、1人組、1人組、2人組が順に座る場合の
最悪の座り方は下記になります
□1□22□1□1□22□□□□□
なので最悪の座り方をシュミレーションしていけば解くことができます。