問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
(はじめに)
実際に大富豪をプレイしてみます。ルールは8切り、イレブンバック、S3のみ考慮します。順位も単純に最初にカードを無くした人が 1 位、次に無くなった人が 2 位、...、最後までカードが残った人が最下位とします。
実際は複数の人で遊ぶゲームですが、ここでは N 人のシミュレーションを行っていきます。つまり、N 人の手札をもとに正しく大富豪で遊ぶプログラムを作ってください。
では、実際にやってみましょう。
(問題)
N 人の手札が与えられます。プレイヤー i (1 ≦ i ≦ N) の手札は A_i 枚で、T_i_1, T_i_2, ..., T_i_{A_i} です。D3を持っているプレイヤーからゲームを開始します。プレイヤー k がカードを出すかパスするかによりターンを終了したら、次はプレイヤー k + 1 がターンを開始します。ただし、プレイヤー N + 1 はプレイヤー 1 のことを指すものとします。全員の順位が決まるまで(手札が残っているプレイヤーが 1 人になるまで)大富豪で遊んでください。ただし、それぞれのプレイヤーにおいて場に出すことが出来るカードが 1 枚でもある場合にはパスすることはできないものとします。
N
A_1
T_1_1 T_1_2 ... T_1_{A_1}
A_2
T_2_1 T_2_2 ... T_2_{A_2}
...
A_N
T_N_1 T_N_2 ... T_N_{A_N}
順位が決まるまでにかかったターン数を q としたとき q + 2 行で出力してください。
i (1 ≦ i ≦ q) 行目では、カードを場に出したプレイヤー番号と出したカードを空白区切りで出力してください。
q + 1 行目には 0 0 と出力してください。
q + 2 行目にはプレイ結果の順位を 1 位のプレイヤーから順に空白区切りで出力してください。
1 ターン目で出されているカードがD3であり、場に出せるのにパスしたプレイヤーがいない状態であり、場に出せないカードを出したプレイヤーもいない状態であり、手札が残っているプレイヤーが 1 人になったらプレイが終了し、なおかつ実際にプレイした順位と一致する場合にのみ正解と判定されます。
同じカードを 2 回使うことが出来ない点に注意してください。
すべてのテストケースにおいて、以下の条件をみたします。
4
14
C8 S6 H2 HA C4 H6 C7 D5 SJ S2 S5 D10 S7 S9
14
D7 S4 HK DQ H5 D3 S8 D4 HQ S3 C3 C5 DA H7
13
D2 D9 SA BJOKER D8 CJ H8 C9 DK HJ SK H3 S10
13
C2 CQ C6 H9 SQ CA D6 C10 H10 H4 CK DJ RJOKER
2 D3
3 H8
3 DK
4 RJOKER
2 S3
2 H7
3 SA
4 C2
3 BJOKER
3 C9
4 CA
1 S2
1 H6
2 DQ
3 D2
3 SK
1 H2
1 S7
2 DA
2 S8
2 D4
3 D8
3 CJ
4 C6
1 C4
2 C3
2 HK
1 HA
1 S6
2 D7
3 S10
4 CK
4 H4
1 SJ
2 S4
3 H3
3 HJ
4 C10
1 C8
1 S5
2 HQ
2 C5
3 D9
4 SQ
4 D6
1 D10
4 CQ
4 H9
4 H10
4 DJ
1 S9
2 H5
0 0
3 4 2 1
8
7
C4 HJ S8 D8 CJ S5 S3
7
H10 C8 H5 H7 D7 H9 S4
7
D9 HA H2 DK D5 D4 S10
7
S7 S9 DA SJ SK H3 H8
7
CA D3 C9 HQ S2 C6 D6
7
D10 SA CK RJOKER D2 C3 BJOKER
6
SQ C5 DJ S6 C2 C7
6
H4 CQ C10 DQ H6 HK
5 D3
6 SA
7 C2
6 BJOKER
1 S3
1 S5
2 D7
3 H2
6 RJOKER
6 C3
7 S6
8 C10
1 HJ
2 H7
3 D5
4 H3
4 S7
5 C9
6 D10
7 DJ
8 H6
1 C4
1 S8
1 CJ
2 C8
2 H10
3 HA
5 S2
5 CA
6 D2
6 CK
4 DA
4 SK
4 H8
4 SJ
5 C6
7 C5
8 H4
8 DQ
3 DK
3 S10
5 HQ
8 HK
8 CQ
1 D8
2 S4
3 D9
7 SQ
7 C7
2 H9
2 H5
4 S9
5 D6
0 0
6 8 1 7 2 4 5 3