結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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}")
0