/* -*- coding: utf-8 -*- * * 370.cc: No.370 道路の掃除 - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_M = 1000; const int INF = 1 << 30; /* typedef */ /* global variables */ int ps[MAX_M + 1], ms[MAX_M + 1]; bool zero = false; /* subroutines */ /* main */ int main() { int n, m; cin >> n >> m; int pn = 0, mn = 0; for (int i = 0; i < m; i++) { int di; cin >> di; if (di > 0) ps[++pn] = di; else if (di < 0) ms[++mn] = -di; else zero = true; } //printf("pn=%d,mn=%d\n", pn, mn); if (zero) n--; sort(ps, ps + pn + 1); sort(ms, ms + mn + 1); int mind = INF, maxi = min(n, mn); for (int i = 0, j = n; i <= maxi; i++, j--) if (j <= pn) { int d0 = ms[i] * 2 + ps[j]; int d1 = ms[i] + ps[j] * 2; //printf("ms[%d]=%d,ps[%d]=%d:%d,%d\n", i, ms[i], j, ps[j], d0, d1); if (mind > d0) mind = d0; if (mind > d1) mind = d1; } printf("%d\n", mind); return 0; }