結果
問題 | No.972 選び方のスコア |
ユーザー | ayaoni |
提出日時 | 2020-11-26 14:19:27 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 219 ms / 2,000 ms |
コード長 | 834 bytes |
コンパイル時間 | 516 ms |
コンパイル使用メモリ | 82,228 KB |
実行使用メモリ | 115,924 KB |
最終ジャッジ日時 | 2024-07-23 20:48:20 |
合計ジャッジ時間 | 8,142 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 |
ソースコード
import sys from itertools import accumulate def I(): return int(sys.stdin.readline().rstrip()) def LI(): return list(map(int,sys.stdin.readline().rstrip().split())) N = I() A = [0]+LI() A.sort() A += [0] SA = list(accumulate(A)) ans = 0 for i in range(1,N+1): # 中央値はA_i ok,ng = 0,min(i-1,N-i)+1 while ok+1 < ng: mid = (ok+ng)//2 if A[N+1-mid]+A[i-mid] >= 2*A[i]: ok = mid else: ng = mid ans = max(ans,SA[i-1]-SA[i-ok-1]+SA[N]-SA[N-ok]-2*ok*A[i]) for i in range(1,N): # 中央値は(A_i+A_(i+1))//2 ok,ng = 0,min(i-1,N-i-1)+1 while ok+1 < ng: mid = (ok+ng)//2 if A[N+1-mid]+A[i-mid] >= A[i]+A[i+1]: ok = mid else: ng = mid ans = max(ans,SA[i-1]-SA[i-ok-1]+SA[N]-SA[N-ok]-ok*(A[i]+A[i+1])) print(ans)