トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

ARC-040-A 床塗り

■■■問題■■■

イカの高橋君は床を塗るのが大好きです。
N×N のマス目状に区切られた床を、友人の青木君と一緒に塗ることにしました。
ただ塗るだけでは面白くないので、以下のようなゲームをしながら床を塗ることにしました。

●高橋君は赤のインクを使い、青木君は青のインクを使って床を塗る。
●塗り終わったら、赤のインクで塗られたマスと青のインクで塗られたマスの個数を数える。
●赤のマスが青のマスよりも多ければ高橋君の勝ち、
  青のマスが赤のマスよりも多ければ青木君の勝ち、
  そうでなければ引き分け。

高橋君と青木君は今床を塗り終わりましたが、勝敗を判定するのに手間取っています。
2人の代わりに勝敗を判定してください。

■■■入力■■■

N
S1
S2
・
・
・
SN

1行目には、マス目の1辺の個数を表す整数 N(1 <= N <= 100) が与えられる。
2行目からのN行には、マス目の情報が与えられる。
このうち i(1 <= i <= N) 行目には、長さNの文字列Siが与えられる。

このうち j(1 <= j <= N) 文字目は、i行目j列目のマスの情報を以下のように表す。 
●'R'の場合:このマスが赤のインクで塗られていることを表す。
●'B'の場合:このマスが青のインクで塗られていることを表す。
●'.'の場合:このマスがまだ塗られていないことを表す。

■■■出力■■■

高橋君の勝ちならばTAKAHASHI、青木君の勝ちならばAOKI、引き分けならばDRAWを1行に出力せよ。
出力の末尾に改行を入れること。


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");
            WillReturn.Add("R.RB");
            WillReturn.Add("RR.B");
            WillReturn.Add("BRBB");
            WillReturn.Add("RRB.");
            //TAKAHASHI
            //赤が7マス、青が6マスなので赤の高橋君の勝ちです
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("2");
            WillReturn.Add("..");
            WillReturn.Add("..");
            //DRAW
            //いずれも0マスで同じなので引き分けです
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("3");
            WillReturn.Add("BRB");
            WillReturn.Add("RBR");
            WillReturn.Add("BRB");
            //AOKI
            //赤が4マス、青が5マスなので青の青木君の勝ちです
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();

        int RedCnt = 0, BlueCnt = 0;

        foreach (string EachStr in InputList.Skip(1)) {
            RedCnt += EachStr.Count(X => X == ('R'));
            BlueCnt += EachStr.Count(X => X == ('B'));
        }

        if (RedCnt == BlueCnt) Console.WriteLine("DRAW");
        if (RedCnt > BlueCnt) Console.WriteLine("TAKAHASHI");
        if (RedCnt < BlueCnt) Console.WriteLine("AOKI");
    }
}


解説

LINQのCountメソッドを使ってます。