Official

G - Random Student ID Editorial by leaf1415


まず、ある \(i\) を固定して \(i\) 番目の新入生(以下、新入生 \(i\) )の学籍番号の期待値を考えます。 新入生 \(i\) の学籍番号は、新入生 \(i\) より名前が辞書順で小さいか等しい者の人数です。 よってその期待値は、すべての \(j = 1, 2, \ldots, N\) にわたる「 \(S_j\)\(S_i\) より辞書順で小さいか等しい確率 \(P_{i, j}\) 」の総和です。 \(P_{i, j}\) は下記の通りに求まります。

  1. \(S_j\)\(S_i\) の接頭辞のとき( \(S_j = S_i\) も含む): \(S_j\) は必ず \(S_i\) より辞書順で小さいか等しいので、\(P_{i, j} = 1\) です。

  2. \(S_i\)\(S_j\) の接頭辞のとき( \(S_j = S_i\) は含まない): \(S_j\) は必ず \(S_i\) より辞書順で大きいので、\(P_{i, j} = 0\) です。

  3. 上記 1. と 2. のどちらでもない場合 : ある \(k\) が存在して、\(S_i\)\(S_j\) は先頭 \(k\) 文字が一致しており、\(k+1\) 文字目が異なります。よって、\(S_i\)\(S_j\) の辞書順の大小関係は両者の \(k+1\) 文字目の大小関係で決まりますが、各英小文字の扱いは対称なので、どちらが大きくなる確率も等しく \(1/2\) です。すなわち、\(P_{i, j} = 1/2\) です。

よって、上記の 1. に当てはまる \(j\) の個数を \(A_i\) 、2.に当てはまる \(j\) の個数を \(B_i\) とおくと、新入生 \(i\) に関する答えは

\[ \sum_{j=1}^N P_{i, j} =A_i \times 1 + B_i \times 0 + (N-A_i-B_i) \times \frac{1}{2} = \frac{A_i - B_i + N}{2} \]

です。 したがって、本問題を解くには、すべての \(i = 1, 2, \ldots, N\) に対して、\(A_i\)\(B_i\) が十分高速に求められれば良いです。 これは、\(N\) 人の名前の集合を Trie 木で表現し、名前の接頭辞の関係を Trie 木上の先祖・子孫の関係に置きかえることで、Trie 木の根を始点とした深さ優先探索などによって実現できます。

以上より、本問題を \(\mathrm{O}(\sum_{i=1}^N |S_i|)\) 時間で解くことができます。

posted:
last update: