結果
問題 |
No.972 選び方のスコア
|
ユーザー |
|
提出日時 | 2024-10-15 01:40:31 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 264 ms / 2,000 ms |
コード長 | 825 bytes |
コンパイル時間 | 519 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 121,984 KB |
最終ジャッジ日時 | 2024-10-15 01:40:39 |
合計ジャッジ時間 | 8,080 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 |
ソースコード
N = int(input()) A = list(map(int, input().split())) A.sort() S = [0] for a in A: S.append(S[-1] + a) def better(i, n): p = A[-n] - A[i] m = A[i] - A[i-n] return p > m def calc_score(i): ai = A[i] nl = i nr = N - i - 1 n = min(nl, nr) left = 1 right = n if better(i, right): h = S[N] - S[N-n] l = S[i] - S[i-n] score = h + l - ai*n*2 return score if not better(i, 1): return A[-1] + A[i-1] - 2*A[i] while right-left > 1: mid = (right + left) // 2 if better(i, mid): left = mid else: right = mid h = S[N] - S[N-left] l = S[i] - S[i-left] score = h + l - ai*left*2 return score ans = 0 for i in range(N): ans = max(ans, calc_score(i)) print(ans)