結果
問題 | No.731 等差数列がだいすき |
ユーザー |
![]() |
提出日時 | 2018-09-07 22:56:21 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 149 ms / 1,500 ms |
コード長 | 1,454 bytes |
コンパイル時間 | 1,452 ms |
コンパイル使用メモリ | 82,564 KB |
実行使用メモリ | 80,128 KB |
最終ジャッジ日時 | 2024-11-29 18:07:47 |
合計ジャッジ時間 | 4,365 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 18 |
ソースコード
from collections import defaultdict,dequeimport sys,heapq,bisect,math,itertools,string,queue,datetimesys.setrecursionlimit(10**8)INF = float('inf')mod = 10**9+7eps = 10**-7def inpl(): return list(map(int, input().split()))def inpls(): return list(input().split())N = int(input())aa = inpl()SUMa = sum(aa)SUM2a = 0SUMaa = 0for i in range(N):SUM2a += aa[i]*(2*i)SUMaa += aa[i]**2def calc(A,d):tmp = SUMaa - 2*SUMa*A - SUM2a*dtmp += A**2*N #A^2tmp += (N-1)*N*A*d #2Adtmp += (N-1)*N*(2*N-1)//6*d**2 #d^2return tmpdef calc_d(A):xx =[0]*4xx[0] = -10**7xx[3] = 10**7xx[1] = (xx[0]*2 + xx[3]) /3xx[2] = (xx[0] + xx[3]*2) /3yy = [0]*4for i in range(4):yy[i] = calc(A,xx[i])for _ in range(300):if yy[1] < yy[2]:xx[3] = xx[2]xx[1] = (xx[0]*2 + xx[3]) /3xx[2] = (xx[0] + xx[3]*2) /3else:xx[0] = xx[1]xx[1] = (xx[0]*2 + xx[3]) /3xx[2] = (xx[0] + xx[3]*2) /3yy[1] = calc(A,xx[1])yy[2] = calc(A,xx[2])return yy[1],xx[1]xx =[0]*4xx[0] = -10**10xx[3] = 10**10xx[1] = (xx[0]*2 + xx[3]) /3xx[2] = (xx[0] + xx[3]*2) /3yy = [0]*4for i in range(4):yy[i],d = calc_d(xx[i])by = yy[1]for _ in range(1000):if yy[1] < yy[2]:xx[3] = xx[2]xx[1] = (xx[0]*2 + xx[3]) /3xx[2] = (xx[0] + xx[3]*2) /3else:xx[0] = xx[1]xx[1] = (xx[0]*2 + xx[3]) /3xx[2] = (xx[0] + xx[3]*2) /3yy[1],d = calc_d(xx[1])yy[2],d = calc_d(xx[2])print(xx[1],d)print(yy[1])