結果
問題 | No.108 トリプルカードコンプ |
ユーザー |
![]() |
提出日時 | 2025-04-09 20:57:27 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 428 ms / 5,000 ms |
コード長 | 973 bytes |
コンパイル時間 | 237 ms |
コンパイル使用メモリ | 82,380 KB |
実行使用メモリ | 136,352 KB |
最終ジャッジ日時 | 2025-04-09 20:59:02 |
合計ジャッジ時間 | 3,694 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 |
ソースコード
import sys from functools import lru_cache def main(): n = int(sys.stdin.readline()) a = list(map(int, sys.stdin.readline().split())) m3_initial = 0 m2_initial = 0 m1_initial = 0 for ai in a: c = max(3 - ai, 0) if c == 3: m3_initial += 1 elif c == 2: m2_initial += 1 elif c == 1: m1_initial += 1 @lru_cache(maxsize=None) def e(m3, m2, m1): sum_m = m3 + m2 + m1 if sum_m == 0: return 0.0 denominator = sum_m / n res = 0.0 if m3 > 0: res += (m3 / n) * e(m3 - 1, m2 + 1, m1) if m2 > 0: res += (m2 / n) * e(m3, m2 - 1, m1 + 1) if m1 > 0: res += (m1 / n) * e(m3, m2, m1 - 1) res = (1 + res) / denominator return res result = e(m3_initial, m2_initial, m1_initial) print("{0:.10f}".format(result)) if __name__ == "__main__": main()