結果

問題 No.162 8020運動
ユーザー rpy3cpprpy3cpp
提出日時 2015-06-02 03:20:02
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 17 ms / 5,000 ms
コード長 1,385 bytes
コンパイル時間 333 ms
コンパイル使用メモリ 10,772 KB
実行使用メモリ 8,236 KB
最終ジャッジ日時 2023-09-20 18:25:50
合計ジャッジ時間 2,265 ms
ジャッジサーバーID
(参考情報)
judge14 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 16 ms
8,040 KB
testcase_01 AC 17 ms
8,028 KB
testcase_02 AC 17 ms
8,156 KB
testcase_03 AC 16 ms
8,032 KB
testcase_04 AC 16 ms
8,212 KB
testcase_05 AC 17 ms
8,032 KB
testcase_06 AC 17 ms
8,208 KB
testcase_07 AC 17 ms
8,104 KB
testcase_08 AC 16 ms
8,168 KB
testcase_09 AC 16 ms
8,216 KB
testcase_10 AC 17 ms
8,184 KB
testcase_11 AC 16 ms
8,092 KB
testcase_12 AC 17 ms
8,108 KB
testcase_13 AC 16 ms
8,052 KB
testcase_14 AC 16 ms
8,100 KB
testcase_15 AC 16 ms
8,100 KB
testcase_16 AC 16 ms
8,196 KB
testcase_17 AC 17 ms
8,032 KB
testcase_18 AC 16 ms
8,080 KB
testcase_19 AC 16 ms
8,040 KB
testcase_20 AC 17 ms
8,104 KB
testcase_21 AC 17 ms
8,056 KB
testcase_22 AC 17 ms
8,236 KB
testcase_23 AC 17 ms
8,112 KB
testcase_24 AC 16 ms
8,096 KB
testcase_25 AC 17 ms
8,060 KB
testcase_26 AC 16 ms
8,188 KB
testcase_27 AC 17 ms
8,104 KB
testcase_28 AC 16 ms
8,036 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def read_data():
    age = int(input())
    p0, p1, p2 = map(int, input().split())
    return age, p0/100.0, p1/100.0, p2/100.0

def solve(age, p0, p1, p2, target=80):
    N = 16
    q0 = [0] * N
    q1 = [0, 1] + [0] * (N-2)
    q2 = [0] * (N-2) + [1, 0]
    q3 = [0, 0] + [1] * (N-4) + [0, 0]
    r0, r1, r2 = 1 - p0, 1 - p1, 1 - p2
    for y in range(target - age):
        qr0 = [q0i * r0 for q0i in q0]
        qr1 = [q1i * r1 for q1i in q1]
        qr2 = [q2i * r1 for q2i in q2]
        qr3 = [q3i * r2 for q3i in q3]
        nq0 = qr0[:]
        nq1 = [0] * N
        nq2 = [0] * N
        nq3 = qr3[:]
        for i in range(1, N-1):
            if q3[i-1] + q1[i-1]:
                s1 = (qr3[i-1] + qr1[i-1])/(q3[i-1] + q1[i-1])
            else:
                s1 = 0
            if q3[i+1] + q2[i+1]:
                s2 = (qr3[i+1] + qr2[i+1])/(q3[i+1] + q2[i+1])
            else:
                s2 = 0
            t2 = 1 - s2
            t1 = 1 - s1
            nq0[i] += qr1[i] * t2 + qr2[i] * t1 + qr3[i] * t2 * t1
            nq1[i] = (qr1[i] + qr3[i] * t1) * s2
            nq2[i] = (qr2[i] + qr3[i] * t2) * s1
            nq3[i] *= s1 * s2
        q0 = nq0
        q1 = nq1
        q2 = nq2
        q3 = nq3
    return 2 * (sum(q0) + sum(q1) + sum(q2) + sum(q3))
    
if __name__ == '__main__':
    age, p0, p1, p2 = read_data()
    print(solve(age, p0, p1, p2))
0