結果

問題 No.425 ジャンケンの必勝法
ユーザー gew1fw
提出日時 2025-06-12 20:27:37
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,102 bytes
コンパイル時間 460 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 62,336 KB
最終ジャッジ日時 2025-06-12 20:27:44
合計ジャッジ時間 1,999 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1 WA * 4
other WA * 18
権限があれば一括ダウンロードができます

ソースコード

diff #

p0, q = map(int, input().split())

# Initialize f with 0.5 for all p
f = [0.5] * 101
threshold = 1e-9

while True:
    new_f = [0.0] * 101
    max_change = 0.0
    for p in range(101):
        p_used = max(0, p - q)
        p_not_used = min(100, p + q)
        
        # Calculate w and d
        w = (1 - p / 100) / 3
        d = (2 + p / 100) / 6
        
        # Probability terms
        prob_method_used = p / 100
        prob_method_not_used = (100 - p) / 100
        
        # Compute the term involving f[p_used] and f[p_not_used]
        term = d * (prob_method_used * f[p_used] + prob_method_not_used * f[p_not_used])
        
        new_f_p = w + term
        new_f[p] = new_f_p
        
        # Update maximum change
        change = abs(new_f_p - f[p])
        if change > max_change:
            max_change = change
    
    # Check for convergence
    if max_change < threshold:
        break
    
    # Update f for next iteration
    f = new_f

# Calculate the total probability
p_total = 1/3 + (1/3) * f[p0]

# Output with sufficient precision
print("{0:.10f}".format(p_total))
0