結果
| 問題 | No.108 トリプルカードコンプ |
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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()
lam6er