結果

問題 No.972 選び方のスコア
ユーザー tcltktcltk
提出日時 2021-09-24 06:14:28
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 307 ms / 2,000 ms
コード長 1,271 bytes
コンパイル時間 238 ms
コンパイル使用メモリ 81,536 KB
実行使用メモリ 137,856 KB
最終ジャッジ日時 2024-07-05 09:39:08
合計ジャッジ時間 11,532 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 301 ms
137,600 KB
testcase_01 AC 298 ms
137,728 KB
testcase_02 AC 294 ms
136,832 KB
testcase_03 AC 220 ms
111,872 KB
testcase_04 AC 296 ms
136,832 KB
testcase_05 AC 295 ms
136,576 KB
testcase_06 AC 298 ms
136,704 KB
testcase_07 AC 266 ms
128,500 KB
testcase_08 AC 270 ms
135,680 KB
testcase_09 AC 257 ms
135,424 KB
testcase_10 AC 225 ms
135,424 KB
testcase_11 AC 225 ms
135,680 KB
testcase_12 AC 282 ms
136,320 KB
testcase_13 AC 277 ms
135,936 KB
testcase_14 AC 279 ms
136,064 KB
testcase_15 AC 284 ms
137,216 KB
testcase_16 AC 287 ms
137,856 KB
testcase_17 AC 282 ms
137,456 KB
testcase_18 AC 119 ms
86,656 KB
testcase_19 AC 307 ms
136,064 KB
testcase_20 AC 301 ms
136,320 KB
testcase_21 AC 297 ms
135,936 KB
testcase_22 AC 283 ms
136,704 KB
testcase_23 AC 303 ms
135,808 KB
testcase_24 AC 301 ms
136,320 KB
testcase_25 AC 120 ms
86,528 KB
testcase_26 AC 129 ms
86,400 KB
testcase_27 AC 124 ms
86,272 KB
testcase_28 AC 126 ms
86,656 KB
testcase_29 AC 131 ms
86,272 KB
testcase_30 AC 120 ms
86,144 KB
testcase_31 AC 133 ms
86,400 KB
testcase_32 AC 117 ms
86,400 KB
testcase_33 AC 141 ms
89,088 KB
testcase_34 AC 121 ms
86,144 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#!/usr/bin/env python3
# from typing import *

import sys
import io
import math
import collections
import decimal
import itertools
import bisect
import heapq


def input():
    return sys.stdin.readline()[:-1]

# sys.setrecursionlimit(1000000)

# _INPUT = """5
# 1 2 3 4 5
# """
# sys.stdin = io.StringIO(_INPUT)

INF = 10**10

def check1(i, k):
    v = A[i-k] + A[N-k] - A[i]*2
    return (v > 0)

def check2(i, k):
    v = A[i-k] + A[N-k] - (A[i] + A[i+1])
    return (v > 0)


N = int(input())
A = list(map(int, input().split()))
A.sort()
S = [0] + list(itertools.accumulate(A))

score_max = 0

# 奇数個数の部分列
for i in range(1, N-1):
    ok = 0
    ng = min(i, N-1-i) + 1
    while ng - ok > 1:
        mid = (ok+ng)//2
        if check1(i, mid):
            ok = mid
        else:
            ng = mid
    k = ok
    score = (S[i]-S[i-k]) + (S[N]-S[N-k]) - 2*k*A[i]
    score_max = max(score_max, score)

# 偶数個数の部分列
for i in range(1, N-2):
    ok = 0
    ng = min(i, N-2-i) + 1
    while ng - ok > 1:
        mid = (ok+ng)//2
        if check2(i, mid):
            ok = mid
        else:
            ng = mid
    k = ok
    score = (S[i]-S[i-k]) + (S[N]-S[N-k]) - k*(A[i]+A[i+1])
    score_max = max(score_max, score)



print(score_max)

0