結果

問題 No.425 ジャンケンの必勝法
ユーザー rpy3cpp
提出日時 2016-09-23 00:02:39
言語 Python3
(3.8.1 + numpy 1.14.5 + scipy 1.1.0)
結果
AC  
実行時間 20 ms
コード長 526 Byte
コンパイル時間 48 ms
使用メモリ 8,244 KB
最終ジャッジ日時 2019-12-31 09:52:46

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
00_sample1.txt AC 16 ms
8,240 KB
00_sample2.txt AC 20 ms
8,176 KB
00_sample3.txt AC 16 ms
8,172 KB
00_sample4.txt AC 16 ms
8,180 KB
00_sample5.txt AC 20 ms
7,996 KB
10_random1.txt AC 16 ms
8,184 KB
10_random2.txt AC 16 ms
8,148 KB
10_random3.txt AC 16 ms
8,028 KB
10_random4.txt AC 20 ms
8,240 KB
10_random5.txt AC 16 ms
8,092 KB
90_corner10.txt AC 20 ms
8,092 KB
99_corner1.txt AC 16 ms
8,152 KB
99_corner2.txt AC 16 ms
7,996 KB
99_corner3.txt AC 20 ms
8,144 KB
99_corner4.txt AC 16 ms
8,148 KB
99_corner5.txt AC 20 ms
8,176 KB
99_corner6.txt AC 16 ms
8,096 KB
99_corner7.txt AC 16 ms
8,088 KB
99_corner8.txt AC 16 ms
8,096 KB
99_corner9.txt AC 16 ms
8,244 KB
99_corner10.txt AC 16 ms
8,244 KB
system_test1.txt AC 20 ms
8,148 KB
system_test2.txt AC 16 ms
8,100 KB
テストケース一括ダウンロード

ソースコード

diff #
def solve(p, q):
    dp = [0.0] * 101
    p_win = 1.0/3.0
    dp[p] = 1.0/3.0
    eps = 10**(-9)
    while sum(dp) > eps:
        dp, p_win_delta = update_dp(dp, q)
        p_win += p_win_delta
    return p_win

def update_dp(dp, q):
    new_dp = [0.0] * 101
    pdelta = 0.0
    for i, pi in enumerate(dp):
        pdelta += (i/200 + (100 - i)/300) * pi
        new_dp[max(0, i - q)] += pi*i/200
        new_dp[min(100, i + q)] += pi*(100-i)/300
    return new_dp, pdelta

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

print(solve(p, q))
0