結果
問題 |
No.309 シャイな人たち (1)
|
ユーザー |
![]() |
提出日時 | 2025-06-12 20:18:23 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,265 bytes |
コンパイル時間 | 181 ms |
コンパイル使用メモリ | 81,736 KB |
実行使用メモリ | 76,648 KB |
最終ジャッジ日時 | 2025-06-12 20:19:36 |
合計ジャッジ時間 | 1,953 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 4 WA * 9 |
ソースコード
import sys def main(): input = sys.stdin.read().split() idx = 0 R = int(input[idx]) idx += 1 C = int(input[idx]) idx +=1 P = [] for _ in range(R): row = list(map(int, input[idx:idx+C])) P.append(row) idx += C S = [] for _ in range(R): row = list(map(int, input[idx:idx+C])) S.append(row) idx += C # Initialize Q Q = [[0.0 for _ in range(C)] for _ in range(R)] epsilon = 1e-9 converged = False while not converged: new_Q = [row[:] for row in Q] max_diff = 0.0 for i in range(R): for j in range(C): # Collect neighbors neighbors = [] if i > 0: neighbors.append((i-1, j)) if j > 0: neighbors.append((i, j-1)) if j < C-1: neighbors.append((i, j+1)) m = len(neighbors) s = S[i][j] Pb = 0.0 if m == 0: if s == 0: Pb = 1.0 else: Pb = 0.0 elif m == 1: q = Q[neighbors[0][0]][neighbors[0][1]] if s == 0: Pb = 1.0 elif s == 1: Pb = q else: Pb = 0.0 elif m == 2: q1 = Q[neighbors[0][0]][neighbors[0][1]] q2 = Q[neighbors[1][0]][neighbors[1][1]] if s == 0: Pb = 1.0 elif s == 1: Pb = q1 + q2 - q1 * q2 elif s == 2: Pb = q1 * q2 else: Pb = 0.0 elif m == 3: q1 = Q[neighbors[0][0]][neighbors[0][1]] q2 = Q[neighbors[1][0]][neighbors[1][1]] q3 = Q[neighbors[2][0]][neighbors[2][1]] if s == 0: Pb = 1.0 elif s == 1: Pb = 1.0 - (1 - q1) * (1 - q2) * (1 - q3) elif s == 2: Pb = q1 * q2 + q1 * q3 + q2 * q3 - 2 * q1 * q2 * q3 elif s == 3: Pb = q1 * q2 * q3 else: Pb = 0.0 p = P[i][j] / 100.0 new_P = p * Pb new_Q[i][j] = new_P # Check for convergence current_max = 0.0 for i in range(R): for j in range(C): diff = abs(new_Q[i][j] - Q[i][j]) if diff > current_max: current_max = diff if current_max < epsilon: converged = True # Update Q for next iteration Q = new_Q # Compute the sum total = 0.0 for i in range(R): for j in range(C): total += Q[i][j] print("{0:.10f}".format(total)) if __name__ == '__main__': main()