結果
問題 |
No.352 カード並べ
|
ユーザー |
|
提出日時 | 2025-08-11 11:03:23 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,218 bytes |
コンパイル時間 | 462 ms |
コンパイル使用メモリ | 12,544 KB |
実行使用メモリ | 10,496 KB |
最終ジャッジ日時 | 2025-08-11 11:03:25 |
合計ジャッジ時間 | 1,553 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 3 |
other | WA * 6 |
ソースコード
def solve(N): if N == 1: return 1.0 # dp[i] 表示放置前i張卡片的總期望成本 total_cost = 1.0 # 第1張卡片成本為1 # 當前序列,用於計算中間位置的成本 sequence = [1] for k in range(2, N + 1): # 第k張卡片有k+1個可能位置 positions = k + 1 probability = 1.0 / positions # 最左和最右位置的成本都是1 edge_cost = 2 * probability * 1 # 中間位置的成本計算 middle_cost = 0.0 for i in range(len(sequence) - 1): # 在位置i和i+1之間插入,成本為sequence[i] * sequence[i+1] cost = sequence[i] * sequence[i + 1] middle_cost += probability * cost # 當前卡片的期望成本 current_expected_cost = edge_cost + middle_cost total_cost += current_expected_cost # 更新序列(為了計算下一張卡片,我們需要知道當前可能的序列狀態) # 但實際上我們只需要知道相鄰數字對,可以簡化 sequence.append(k) return total_cost N = int(input()) result = solve(N) print(f"{result:.10f}")