結果
問題 |
No.1173 Endangered Species
|
ユーザー |
![]() |
提出日時 | 2025-03-31 17:24:29 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 138 ms / 2,000 ms |
コード長 | 1,744 bytes |
コンパイル時間 | 305 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 124,644 KB |
最終ジャッジ日時 | 2025-03-31 17:25:04 |
合計ジャッジ時間 | 2,955 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
import math def main(): import sys input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 p = list(map(float, input[ptr:ptr + N])) ptr += N q = list(map(float, input[ptr:ptr + N])) ptr += N A = list(map(int, input[ptr:ptr + N])) ptr += N # Solve for s using Newton-Raphson s = 0.5 # Initial guess eps = 1e-12 max_iterations = 100 for _ in range(max_iterations): sum1 = 0.0 sum2 = 0.0 for j in range(N): pj = p[j] qj = q[j] denom = 1.0 - qj * s if denom <= 0: denom = 1e-12 # Prevent division by zero, though problem states it's unnecessary term1 = pj * (1.0 - qj) / denom sum1 += term1 term2 = term1 * qj / denom sum2 += term2 g = sum1 - s if abs(g) < 1e-15: break g_deriv = sum2 - 1.0 if g_deriv == 0: break # Prevent division by zero s_new = s - g / g_deriv if abs(s_new - s) < eps: s = s_new break s = s_new # Calculate log probability log_p = 0.0 for i in range(N): ai = A[i] if ai == 0: continue qi = q[i] denom = 1.0 - qi * s if denom <= 0: ei = 0.0 # Should not happen according to problem constraints else: ei = (1.0 - qi) / denom if ei <= 0.0: # This would be an error as per problem statement ei = 1e-20 log_p += ai * math.log(ei) # Print with sufficient precision print("{0:.10f}".format(log_p)) if __name__ == '__main__': main()