結果

問題 No.425 ジャンケンの必勝法
ユーザー rpy3cpp
提出日時 2016-09-23 00:02:39
言語 Python3
(3.7.4 + numpy 1.14.5 + scipy 1.1.0)
結果
AC  
実行時間 22 ms
コード長 526 Byte
コンパイル時間 251 ms
使用メモリ 5,580 KB
最終ジャッジ日時 2019-11-28 13:57:49

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
00_sample1.txt AC 21 ms
5,580 KB
00_sample2.txt AC 21 ms
5,576 KB
00_sample3.txt AC 21 ms
5,576 KB
00_sample4.txt AC 20 ms
5,572 KB
00_sample5.txt AC 20 ms
5,580 KB
10_random1.txt AC 20 ms
5,576 KB
10_random2.txt AC 20 ms
5,576 KB
10_random3.txt AC 20 ms
5,576 KB
10_random4.txt AC 20 ms
5,576 KB
10_random5.txt AC 20 ms
5,576 KB
90_corner10.txt AC 21 ms
5,576 KB
99_corner1.txt AC 20 ms
5,576 KB
99_corner2.txt AC 22 ms
5,576 KB
99_corner3.txt AC 21 ms
5,580 KB
99_corner4.txt AC 22 ms
5,576 KB
99_corner5.txt AC 20 ms
5,572 KB
99_corner6.txt AC 22 ms
5,576 KB
99_corner7.txt AC 21 ms
5,576 KB
99_corner8.txt AC 20 ms
5,580 KB
99_corner9.txt AC 20 ms
5,580 KB
99_corner10.txt AC 19 ms
5,576 KB
system_test1.txt AC 20 ms
5,576 KB
system_test2.txt AC 20 ms
5,576 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