足跡-sokuseki-

りかの日進月歩の記録

AOJ1249 Make a Sequence

Make a Sequence | Aizu Online Judge

問題概要

2人のプレイヤーが白と黒の石を使って交互にゲームをプレイする。黒が先手。
 n* n 本のペグ(杭)があり、それぞれ  n 個までボールを重ねることができる。
ゲーム開始時にはどのペグにもボールはない。

ターンになると、プレイヤーは1つのペグを選び自分の色のボールを1つ置くことができる。そのペグにボールがない場合は自分のボールがペグの一番下になり、そうでない場合はそのペグの一番上にあるボールの上に重なる。
縦または横または斜めに自分の色のボールが  m 個以上連続した列ができるとそのプレイヤーの勝ちになる。勝者が決まる前にボールを置く場所がなくなったりゲームをやめてしまったら引き分けになる。(勝者が決まっているのにプレイを続行している入力があることに注意する。)

ターン数  p とボールを置いたペグの座標  (x_i, y_i)  1 \le i \le p )が与えられるので、どちらのプレイヤーが勝ったかを判定する。黒が勝った場合は"Black"、白が勝った場合は"White"、引き分けだった場合は"Draw"を出力する。また引き分けでないときは勝敗が決まったターン数も出力する。

制約

 3 \le m \le n \le 7
 1 \le p \le n^3
 1 \le x_i, y_i \le n

解法

それぞれのターンごとに、勝者が決まるかどうかを判定します。
ある位置にボールを置いたとき、ボールが  m 個連続しているかどうかを見る必要があるのは13方向(くわしくは問題文参照)で、各方向につき  n 個見ればいいので、全体で  p * 12 *  n 回になって間に合います。

愚直に書くと行数がアになるのでもう少し綺麗に書きたいですね。
AIZU ONLINE JUDGE: Code Review