方針は簡単だが、実装は少しだけ間違えやすい。やらかした。

友人らが踏んでいた点として、

  • for l in range(m - n + 1):の内側で(min maxによる暗黙のものも含む)場合分けをするのが正解。外側で場合分けすると面倒になるようだ。
  • 入力はsortされているとは限らない。
#!/usr/bin/env python3
n, m = map(int,input().split())
d = sorted([int(input()) for i in range(m)])
ans = float('inf')
for l in range(m - n + 1):
    r = l + n - 1
    if d[l] <= d[r] <= 0:
        acc = - d[l]
    elif 0 <= d[l] <= d[r]:
        acc = d[r]
    else:
        assert d[l] <= 0 <= d[r]
        acc = max(- d[l], d[r]) + 2 * min(- d[l], d[r])
    ans = min(ans, acc)
print(ans)