結果
問題 |
No.731 等差数列がだいすき
|
ユーザー |
![]() |
提出日時 | 2025-02-20 01:36:12 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 899 bytes |
コンパイル時間 | 442 ms |
コンパイル使用メモリ | 82,148 KB |
実行使用メモリ | 105,884 KB |
最終ジャッジ日時 | 2025-02-20 01:36:20 |
合計ジャッジ時間 | 7,282 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | TLE * 1 -- * 17 |
ソースコード
import sys input = sys.stdin.readline from decimal import Decimal, getcontext # 小数点以下50桁の精度を設定 getcontext().prec = 20 N = int(input()) A = list(map(Decimal, input().split())) level = sum(A) / N MIN = Decimal(-10**15) MAX = Decimal(10**15) for _ in range(300): mid1 = MIN + (MAX - MIN) / 3 mid2 = MIN + 2 * (MAX - MIN) / 3 sa1 = (level - mid1) / (Decimal((N + 1) / 2) - 1) sa2 = (level - mid2) / (Decimal((N + 1) / 2) - 1) score1 = sum((A[i] - (mid1 + i * sa1)) ** 2 for i in range(N)) score2 = sum((A[i] - (mid2 + i * sa2)) ** 2 for i in range(N)) if score1 < score2: MAX = mid2 else: MIN = mid1 ANS = (MAX + MIN) / 2 sa = (level - ANS) / (Decimal((N + 1) / 2) - 1) score = Decimal(0) for i in range(N): diff = A[i] - (ANS + i * sa) score += diff * diff print(f'{ANS:.10f} {sa:.10f}') print(f'{score:.10f}')