呢題係一道交互題。記得喺每次輸出之後刷新輸出緩衝區。你可以使用以下方式刷新輸出:
- 喺 C/C++ 入面使用
fflush(stdout)或者cout.flush(); - 喺 Java 同 Kotlin 入面使用
System.out.flush(); - 喺 Python 入面使用
sys.stdout.flush()。

由 Nano Banana Pro 繪製嘅遊戲概念圖。
你正喺度參加一場叫做左輪輪盤賭(Revolver Roulette)嘅策略回合制遊戲。
遊戲開始嗰陣,左輪手槍入面裝填咗恰好 $6$ 發子彈。每發子彈獨立咁以相等概率係實彈(live)或者空包彈(blank)。雙方玩家永遠知道轉輪入面當前淨低嘅實彈同空包彈數量,但唔知道佢哋嘅具體排列順序。
每位玩家一開始有 $5$ 點生命值(HP)同埋 $2$ 件道具。如果一位玩家嘅 HP 跌到 $0$ 或以下,就會被淘汰,由另一位玩家獲勝。雙方玩家輪流執行行動。
回合流程
喺自己嘅回合入面,當前行動玩家可以執行任意次數嘅以下行動:
- 使用任意道具。
- 執行任意射擊行動。
只有當一次射擊行動令到回合轉交畀對方玩家,或者有玩家被淘汰嗰陣,當前回合先會結束。
射擊行動
當前行動玩家必須由以下射擊行動入面揀一種:
Fire at Opponent(向對手開槍):當前玩家向對方玩家射出下一發子彈。如果係實彈,對方玩家失去 $1$ 點 HP。無論子彈係咩類型,回合都會轉交畀對方玩家。Fire at Self(向自己開槍):當前玩家向自己射出下一發子彈。如果係實彈,當前玩家失去 $1$ 點 HP,而且回合轉交畀對方玩家。否則,如果係空包彈,當前玩家保留回合並繼續執行行動。
道具
當一件道具被使用嗰陣,件道具會被消耗,而且無論道具係咩類型,當前行動玩家都會保留回合。所有道具對雙方玩家都係可見嘅。當玩家獲得一件新道具(包括一開始嘅每件道具)嗰陣,會由以下四種類型入面均勻隨機揀出:
Dummy(假人):向訓練假人射出下一發子彈。呢個行動會消耗嗰發子彈,而且唔視為一次射擊行動。Magnifier(放大鏡):偷睇下一發子彈,顯示下一發子彈係實彈定係空包彈。雙方玩家都會知道結果。Converter(轉換器):反轉下一發子彈嘅類型(實彈 $\leftrightarrow$ 空包彈)。雙方玩家都會觀察到更新後嘅實彈同空包彈數量。Cage(牢籠):獲得一個一次性效果,阻止下一次原本會結束回合嘅射擊行動結束回合。具體嚟講:- 如果玩家之後執行
Fire at Opponent(無論子彈係實彈定空包彈),該效果生效,回合唔會結束。 - 如果玩家之後執行
Fire at Self而且子彈係實彈,該效果生效,回合唔會結束(玩家仍然會失去 $1$ 點 HP,但保留回合)。
呢個效果喺生效一次之後即刻消耗。每個回合最多只能使用一件
Cage道具。- 如果玩家之後執行
重新裝填(Reloading)
當轉輪打空嗰陣,會即刻裝填 $6$ 發新子彈(每發獨立咁以相等概率係實彈或空包彈)。雙方玩家都會獲知新嘅實彈同空包彈數量。除此之外,每位玩家嘅道具會補充到最多 $2$ 件(有 $k$ 件道具嘅玩家會收到 $(2 - k)$ 件新道具,每件獨立咁由上述四種類型入面均勻隨機揀出)。
目標
你係先手玩家,你嘅目標係透過淘汰對手嚟贏得遊戲。
輸入格式
第一行包含兩個整數 $n$ 同 $w$,表示你需要喺 $n$ 局遊戲入面至少贏 $w$ 局先可以獲得通過。本題只有三個測試點:
- 範例測試點:$n = 1$ 同 $w = 0$。($0\%$)
- 秘密測試點 1:$n = 2\,000$ 同 $w = 1\,000$。($50\%$)
- 秘密測試點 2:$n = 20\,000$ 同 $w = 11\,000$。($55\%$)
可以證明,當雙方玩家都採取最優策略嗰陣,先手玩家大約可以贏到 $56.89\%$ 嘅遊戲。
交互協議
遊戲開始
你嘅程序作為先手玩家同交互器對局。喺每局遊戲開始嗰陣,交互器會輸出一個整數 $g$:
- 如果 $g = 0$,當前運行入面嘅所有遊戲都已經完成。你嘅程序必須即刻終止。
- 否則,$g$ 係當前遊戲嘅編號($1 \le g \le n$)。
由於技術原因,你嘅程序喺每個測試點上面會被執行兩次:
- 交互器可以隨時透過畀出 $g = 0$ 嚟決定重啟你嘅程序。
喺同一個測試點嘅每次運行入面,你都會收到相同嘅 $n$ 同 $w$。因此,$n$ 唔一定等於當前運行入面嘅遊戲局數。保證第 $1, \dots, n$ 局遊戲喺兩次運行入面夾埋恰好各玩一次。除咗呢點之外,你嘅程序可以安全咁忽略運行兩次呢個條件。
遊戲狀態
跟住,交互器會輸出一行包含 $13$ 個非負整數嘅遊戲狀態:
$$t \quad l \quad b \quad h_1 \quad d_1 \quad m_1 \quad c_1 \quad k_1 \quad h_2 \quad d_2 \quad m_2 \quad c_2 \quad k_2$$
- $t \in \{0, 1, 2\}$:回合狀態。
- $l, b$($1 \le l + b \le 6$):轉輪入面當前淨低嘅實彈同空包彈數量。
- $h_1$($0 \le h_1 \le 5$):你當前嘅 HP。
- $d_1, m_1, c_1, k_1$($0 \le d_1 + m_1 + c_1 + k_1 \le 2$):你當前持有嘅
Dummy、Magnifier、Converter同Cage道具數量。 - $h_2$($0 \le h_2 \le 5$):你對手當前嘅 HP。
- $d_2, m_2, c_2, k_2$($0 \le d_2 + m_2 + c_2 + k_2 \le 2$):你對手持有嘅
Dummy、Magnifier、Converter同Cage道具數量。
情況 $t = 0$(遊戲結束)
當前遊戲已經結束。交互器進入下一局遊戲(輸出新嘅 $g$)。
情況 $t = 1$(你嘅回合)
你必須輸出一個整數嚟揀一個行動:
Fire at Opponent。Fire at Self。- 使用一件
Dummy道具。 - 使用一件
Magnifier道具。 - 使用一件
Converter道具。 - 使用一件
Cage道具。
如果行動無效(例如使用你冇嘅道具,或者喺同一個回合入面使用超過一次 Cage 道具),遊戲狀態保持不變,交互器會輸出 $0$ 同埋再輸出一次相同嘅狀態行($13$ 個整數)。雖然仲係你嘅回合,但你必須做出另一個有效行動先可以繼續遊戲。
否則,行動生效,交互器會輸出一個結果整數:
- 對於行動 $1$–$5$:如果行動前嘅下一發子彈係實彈則返回 $1$,如果係空包彈則返回 $2$。
- 對於行動 $6$:返回 $1$(唔會透露任何子彈資訊)。
然後交互器會輸出更新後嘅遊戲狀態行。
情況 $t = 2$(對手嘅回合)
交互器會模擬你對手嘅行動並輸出兩行:
- 行動編號 $a \in \{1, \dots, 6\}$。
- 結果整數(如上所述嘅 $1$ 或 $2$)。
你嘅對手絕對唔會做出非法行動。緊接住之後,交互器會輸出下一條遊戲狀態行($13$ 個整數)。
喺每局遊戲嘅每一輪入面,遊戲模擬器都會使用固定隨機種子嘅偽隨機數生成器。同時,交互器入面嘅對手採用確定性策略。重啟你程序嘅決定獨立於交互過程。因此,相同嘅行動序列永遠會導致相同嘅遊戲狀態。
題目提供咗測試工具,以協助你開發同測試你嘅程序。
範例
範例 1,階段 1
輸入
1 0 1 1 3 3 5 0 0 0 2 5 1 0 1 0 1 1 3 3 5 0 0 0 1 5 1 0 1 0 1 1 2 3 5 0 0 0 1 4 1 0 1 0 0 1 2 3 5 0 0 0 1 4 1 0 1 0 2 1 2 2 5 0 0 0 1 4 1 0 1 0 1 2 1 2 5 0 0 0 1 3 1 0 1 0 5 2 2 2 1 5 0 0 0 1 3 1 0 0 0 1 1 1 1 1 4 0 0 0 1 3 1 0 0 0 1 2 0 1 4 0 0 0 1 2 1 0 0 0 3 2 2 2 4 4 0 1 0 1 2 0 1 0 1 2 1 1 1 4 4 0 1 0 1 1 0 1 0 1 1 1 1 4 4 0 0 0 1 1 0 1 0 1 1 0 0 4 4 0 0 0 1 0 0 1 0 1 0
輸出
6 1 6 2 1 1 4 1
範例 1,階段 2
輸入
1 0 0