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と仮定し、
矛盾がないかをチェックしてます。