AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC088-C Takahashi's Information
■■■問題■■■
3×3のグリッドがあります。
上からi番目で左からj番目のマスを(i,j)で表すとき、マス(i,j)には数 ci,j が書かれています。
高橋君によると、
整数a1,a2,a3,b1,b2,b3の値が決まっており、マス(i,j)には数 ai+bj が書かれているらしいです。
高橋君の情報が正しいか判定しなさい。
■■■入力■■■
c1,1 c1,2 c1,3
c2,1 c2,2 c2,3
c3,1 c3,2 c3,3
●ci,j (1 <= i <= 3,1 <= j <= 3) は0以上100以下の整数
■■■出力■■■
高橋君の情報が正しい場合Yes、そうでない場合Noと出力してください。
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("1 0 1");
WillReturn.Add("2 1 2");
WillReturn.Add("1 0 1");
//Yes
//a1=0,a2=1,a3=0,b1=1,b2=0,b3=1 などの組み合わせがありうるので、
//高橋君の情報は正しいです。
}
else if (InputPattern == "Input2") {
WillReturn.Add("2 2 2");
WillReturn.Add("2 1 2");
WillReturn.Add("2 2 2");
//No
//このグリッドの場合、高橋君の情報は間違っています
}
else if (InputPattern == "Input3") {
WillReturn.Add("0 8 8");
WillReturn.Add("0 8 8");
WillReturn.Add("0 8 8");
//Yes
}
else if (InputPattern == "Input4") {
WillReturn.Add("1 8 6");
WillReturn.Add("2 9 7");
WillReturn.Add("0 7 7");
//No
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = { };
Action<string> SplitAct = pStr =>
wkArr = pStr.Split(' ').Select(X => int.Parse(X)).ToArray();
SplitAct(InputList[0]);
int C11 = wkArr[0], C12 = wkArr[1], C13 = wkArr[2];
SplitAct(InputList[1]);
int C21 = wkArr[0], C22 = wkArr[1], C23 = wkArr[2];
SplitAct(InputList[2]);
int C31 = wkArr[0], C32 = wkArr[1], C33 = wkArr[2];
bool IsOK = true;
int A1 = 0;
int B1 = C11 - A1;
int A2 = C12 - B1;
int A3 = C13 - B1;
int B2 = C21 - A1;
int B3 = C31 - A1;
if (A1 + B1 != C11) IsOK = false;
if (A2 + B1 != C12) IsOK = false;
if (A3 + B1 != C13) IsOK = false;
if (A1 + B2 != C21) IsOK = false;
if (A2 + B2 != C22) IsOK = false;
if (A3 + B2 != C23) IsOK = false;
if (A1 + B3 != C31) IsOK = false;
if (A2 + B3 != C32) IsOK = false;
if (A3 + B3 != C33) IsOK = false;
Console.WriteLine(IsOK ? "Yes" : "No");
}
}
解説
a1を0と仮定し、
矛盾がないかをチェックしてます。