結果
| 問題 |
No.1173 Endangered Species
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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()
lam6er