結果

問題 No.615 集合に分けよう
ユーザー FromBooska
提出日時 2023-02-20 16:19:59
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 788 bytes
コンパイル時間 184 ms
コンパイル使用メモリ 81,920 KB
実行使用メモリ 80,896 KB
最終ジャッジ日時 2024-07-21 08:31:56
合計ジャッジ時間 4,248 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 1 WA * 1 TLE * 1 -- * 23
権限があれば一括ダウンロードができます

ソースコード

diff #

# Aをソートして二分探索

N, K = map(int, input().split())
A = list(map(int, input().split()))
A.sort()

def check(x):
    last = A[0]
    count = 1
    s = 0
    for i in range(N):
        if A[i] > last + x:
            s += A[i-1]-last
            last = A[i]
            count += 1
    s += A[N-1]-last
    return count, s

#for x in range(25):
#    print(x, check(x))
#print()

OK1 = 10**12+1
NG1 = -1
while (OK1-NG1)>1:
    mid = (OK1+NG1)//2
    if check(mid)[0] <= K:
        OK1 = mid
    else: 
        NG1 = mid
#print(OK1)

OK2 = 10**12+1
NG2 = -1
while (OK2-NG2)>1:
    mid = (OK2+NG2)//2
    if check(mid)[0] <= K-1:
        OK2 = mid
    else: 
        NG2 = mid
#print(OK2)

ans = 10**12
for i in range(OK1, OK2+1):
    ans = min(ans, check(i)[1])
print(ans)




0