【スキルチェック過去問題セット】> 神経衰弱 (paizaランク B 相当) [難易度: 1588 ±12]
※リンク先へ移動するためには[paiza]へのログインが必要です。
神経衰弱と呼ばれるトランプゲームのシミュレーションをしましょう。
今回は数字が書かれたトランプのみを考え、ジョーカーは考えません。
まず、トランプを縦 H 枚、横 W 枚の長方形の形に並べた状態でスタートします。
H × W 枚のトランプには 1 〜 13 の数字のうちどれか1つが書かれています。
また、同じ数字が書かれたトランプが複数あります。
プレイヤーが N 人おり、それぞれ 1 〜 N で番号付けられています。
ゲームが始まると、1番の人から、このような手順でプレイしていきます。
・並べられたトランプから2枚のトランプを選び、めくります。
・めくった2枚のトランプに異なる数字が書かれていれば、次のプレイヤーの手番となります。同じ数字であれば、次の操作をおこないます。
・まず、2枚のトランプはめくったプレーヤーのものとなり、取り除かれます。
・トランプがすべて取り除かれた場合、ゲームは終了となります。
・トランプが残っている場合、同じプレーヤーがまた最初の手順に戻り、トランプをめくります。
ここで、N 番のプレイヤーの次のプレイヤーは 1 番のプレイヤーであるとします。
ゲームの初期状態におけるトランプの配置と、ゲームが終わるまでに捲られたトランプに関する時系列順の記録が与えられます。
その記録を用いて、各プレイヤーが取り除いたトランプの枚数を求めてください。
入力値(例)
2 3 2
1 2 3
2 1 3
5
1 1 2 1
1 1 1 2
1 1 2 2
1 3 2 3
1 2 2 1
出力値(例)
6
0
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php list($h, $w, $n) = explode(" ", trim(fgets(STDIN))); for($i=0; $i<$h; $i++) { $t[] = explode(" ", trim(fgets(STDIN))); } $l = trim(fgets(STDIN)); $player_card = array_fill(0, $n, 0); $player = 0; for($i=0; $i<$l; $i++) { list($a, $b, $A, $B) = explode(" ", trim(fgets(STDIN))); $a -= 1; $b -= 1; $A -= 1; $B -= 1; // 同じカードを引いたかどうか if($t[$a][$b] == $t[$A][$B]) { $player_card[$player] += 2; } // 同じカードを引かなかった場合は、次のプレイヤーの番になる else { $player ++; $player %= $n; } } for($i=0; $i<$n; $i++) { echo $player_card[$i]. "\n"; } ?> |