ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

AOJ 1249 - Make a Sequence

問題

立体的な五目並べのゲームをシミュレーションして、先手と後手のどちらがどのタイミングで勝利したか判定してください、というものです(引き分けも存在します)。
提出コード

解法

本当にバグらせないように愚直に実装するだけです…
まずは3次元配列を用意してそれぞれをx,y,z軸の座標に対応させます。
その後、入力を受け取り、玉を格納していきます。
while文を利用して、z軸の座標を決めるとすんなりいくかと思います。
次に、毎ターン玉を置き終わるたびに、ゲームがクリアされたかどうか判定をしていきます。
x軸、y軸、z軸は、それぞれ

  1. 移動しない

  2. 1追加していく

  3. 1減らしていく

の3通りあり、これが3^{3}で27通りとなります(実際にはすべて移動しないパターンはカウントしてはいけないので、26通りです)。これを愚直に3重ループで決定し、さらに開始位置も3重ループで決定したうえで、mマスをたどるためのループを一番内側にネストするので、7重ループが完成しました。
mマスたどった後に枠外にはみ出ることが無いように注意しましょう。
あとは、このループで勝利判定をしていくのですが、見ていったマスが黒か白でそれぞれ別にカウントをし、mマス見終わった段階でm個すべてが白(もしくは黒)になっていれば、商社が決まっているということになります。

…とだらだら綴ってみたのですが、あとはひたすらバグがないように祈りつつ実装を行うだけです。自分は、3、4箇所バグが存在してそこそこ時間がかかりました。