結果
問題 | No.731 等差数列がだいすき |
ユーザー |
![]() |
提出日時 | 2025-02-20 01:36:36 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 955 ms / 1,500 ms |
コード長 | 858 bytes |
コンパイル時間 | 359 ms |
コンパイル使用メモリ | 12,416 KB |
実行使用メモリ | 11,136 KB |
最終ジャッジ日時 | 2025-02-20 01:36:49 |
合計ジャッジ時間 | 12,607 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 18 |
ソースコード
import sys input = sys.stdin.readline from decimal import Decimal, getcontext 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}')