結果

問題 No.370 道路の掃除
ユーザー lam6er
提出日時 2025-03-20 20:31:50
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 41 ms / 2,000 ms
コード長 929 bytes
コンパイル時間 284 ms
コンパイル使用メモリ 82,980 KB
実行使用メモリ 54,388 KB
最終ジャッジ日時 2025-03-20 20:32:52
合計ジャッジ時間 2,677 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 34
権限があれば一括ダウンロードができます

ソースコード

diff #

import bisect

def main():
    import sys
    input = sys.stdin.read().split()
    idx = 0
    N = int(input[idx])
    idx +=1
    M = int(input[idx])
    idx +=1
    D = []
    for _ in range(M):
        D.append(int(input[idx]))
        idx +=1
    D.sort()
    p = bisect.bisect_left(D, 0)
    ln = p
    rn = M - p
    min_dist = float('inf')
    
    for k in range(0, N+1):
        m = N - k
        if k > ln or m > rn:
            continue
        if k ==0:
            # All from right
            R = D[p + m -1]
            dist = R
        elif m ==0:
            # All from left
            L = D[p - k]
            dist = abs(L)
        else:
            L = D[p -k]
            R = D[p + m -1]
            path1 = abs(L) + (R - L)
            path2 = R + (R - L)
            dist = min(path1, path2)
        if dist < min_dist:
            min_dist = dist
    print(min_dist)

if __name__ == "__main__":
    main()
0