結果

問題 No.309 シャイな人たち (1)
ユーザー maspy
提出日時 2020-05-16 16:47:30
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 146 ms / 4,000 ms
コード長 1,242 bytes
コンパイル時間 265 ms
コンパイル使用メモリ 82,232 KB
実行使用メモリ 120,268 KB
最終ジャッジ日時 2024-09-22 12:25:15
合計ジャッジ時間 2,728 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 13
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import sys
import itertools
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
H, W = map(int, readline().split())
readline()
P = []
for _ in range(H):
P += [0.0] + [0.01 * int(x) for x in readline().split()]
readline()
S = []
for _ in range(H):
S += [4] + list(map(int, readline().split()))
W += 1
# (bit, n) = (, )
dp = [0.0] * (W * (1 << W))
dp[0] = 1.0
mask = (1 << W) - 1
answer = 0
for p, s in zip(P, S):
newdp = [0.0] * (W * (1 << W))
for i in range(W * (1 << W)):
if dp[i] == 0.0:
continue
bit, n = divmod(i, W)
#
bit1 = (bit << 1) & mask
newdp[bit1 * W] += dp[i] * (1 - p)
#
s1 = s - (bit & 1) - (bit >> W - 1)
if s1 > 1:
#
newdp[bit1 * W] += dp[i] * p
elif s1 == 1:
# 1
newdp[bit1 * W + n + 1] += dp[i] * p
else:
#
answer += (n + 1) * dp[i] * p
bit1 |= (1 << n + 1) - 1
newdp[bit1 * W] += dp[i] * p
dp = newdp
print(answer)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1