筑波大学プログラミングコンテスト2024
コンテスト日時
2024/11/17 (Su) 12:00 - 16:00

H - Hyper Nim Machine

Ceylon
2
s
1024
MB
650

問題文

石の山が $N$ 個あり、$i$ 番目の山には石が $A_{i}$ 個あります。

高橋くんと最強の Nim マシン Anstoppable Omnipotent King of Ishitori 、通称 Aoki はこれらの山を使って Nim で対戦します。

Nim とは、以下の操作を交互に繰り返し、操作が行えなくなったほうが負けとなるゲームです。

操作:石が $1$ 個以上残っている山を $1$ つ選び、そこから $1$ 個以上の石を取り除く。

最強の Nim マシン Aoki は自分の番に 最適な 操作の中から一様ランダムに一つを選んで行いますが、整備不良のため、自分の最初の番だけは 可能な 操作の中から一様ランダムに一つを選んで行います。

先攻プレイヤーの情報 $S$ が与えられます。$S$ が Takahashi の場合は高橋くんが先攻、Aoki の場合は最強の Nim マシン Aoki が先攻です。

高橋くんが最適に行動した場合の勝率を求めてください。答えは有理数になることが証明できるので、それを既約分数の形で出力してください。

制約

  • $1 \le N \le 2\times 10^{5}$
  • $1 \le A_{i} \le 10^{9}$
  • $N, A_{i}$ は整数
  • $S$ は TakahashiAoki のいずれか

部分点

この問題には、部分点が設定されている。部分点の採点方法については、コンテストトップ を参照すること。

  1. ($70$ 点)
  • $N \le 2\times 10^{3}$
  • $\sum_{i=1}^{N} A_{i} \le 5\times 10^{3}$
  • $S$ は Takahashi
  1. ($70$ 点)
  • $N \le 2\times 10^{3}$
  • $\sum_{i=1}^{N} A_{i} \le 5\times 10^{3}$
  • $S$ は Aoki
  1. ($70$ 点)
  • $\sum_{i=1}^{N} A_{i} \le 5\times 10^{5}$
  • $S$ は Takahashi
  1. ($70$ 点)
  • $\sum_{i=1}^{N} A_{i} \le 5\times 10^{5}$
  • $S$ は Aoki
  1. ($70$ 点)
  • $S$ は Takahashi
  1. ($70$ 点)
  • $S$ は Aoki
  1. ($230$ 点)
  • 追加の制約はない。

入力

入力は以下の形式で標準入力から与えられる。

$N$

$A_1$ $A_2$ $\cdots$ $A_N$

$S$

出力

答えを既約分数の形で一行に出力せよ。厳密には、答えとなる有理数が既約分数で $P/Q$ と表せるとき、 $P$ 、/、$Q$ をこの順に一行に出力せよ。間に余分な空白などを入れてはならない。

入力例 1
2 2 2 Takahashi
出力例 1
2/3

高橋くんが先攻です。ここでは、高橋くんが最初の番に $1$ 番目の山から $1$ 個石を取ることにする場合を考えます。
次の Aoki の番では、Aoki は以下の操作から一つを等確率で選んで行います。

  • $1$ 番目の山から $1$ 個の石を取る(操作 a)。
  • $2$ 番目の山から $1$ 個の石を取る(操作 b)。
  • $2$ 番目の山から $2$ 個の石を取る(操作 c)。

Aoki が操作 a または c を行った場合、これ以降両者が最適に行動すれば高橋くんがゲームに勝つことが示せます。Aoki が操作 b を行った場合、高橋くんは勝つことができません。このとき、高橋くんが勝利する確率は $\frac{2}{3}$ で、これが最大となります。

この入力は、部分点 1., 3., 5. の制約を満たします。

入力例 2
2 1 3 Aoki
出力例 2
3/4

Aoki が先攻です。Aoki は最初の番に以下の操作から一つを等確率で選んで行います。

  • $1$ 番目の山から $1$ 個の石を取る(操作 d)。
  • $2$ 番目の山から $1$ 個の石を取る(操作 e)。
  • $2$ 番目の山から $2$ 個の石を取る(操作 f)。
  • $2$ 番目の山から $3$ 個の石を取る(操作 g)。

Aoki が操作 d, e, g のいずれかを行った場合、これ以降両者が最適に行動すれば高橋くんがゲームに勝つことが示せます。Aoki が操作 f を行った場合、高橋くんは勝つことができません。したがって、高橋くんが勝利する確率は $\frac{3}{4}$ です。

この入力は、部分点 2., 4., 6. の制約を満たします。

入力例 3
6 3 1 4 1 5 9 Takahashi
出力例 3
1/1

高橋くんが先攻です。Aoki が最初の自分の番にどのような操作を行っても、高橋くんは必ず勝つことができます。

この入力は、部分点 1., 3., 5. の制約を満たします。

入力例 4
3 1 1 1 Aoki
出力例 4
0/1

Aoki が先攻です。Aoki が最初の自分の番に行う操作は山を区別すると $3$ 通りありますが、どのような場合でも高橋くんは必ず負けてしまいます。この場合は 0/1 と出力してください。

この入力は、部分点 2., 4., 6. の制約を満たします。

提出
C++23 (g++ 12.2.0)