#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
priority_queue<int> left;
priority_queue<int> right;
// 왼쪽과 오른쪽을 각각 힙에 넣음
for (int i = 0; i < n; i++) {
int x;
cin >> x;
if (x < 0) {
left.push(-x); // 음수 좌표는 양수로 변환
} else {
right.push(x); // 양수는 그대로
}
}
priority_queue<int> distance; // 최종 거리를 저장할 최대 힙
// 왼쪽 힙에서 m개씩 그룹화하여 가장 먼 거리 저장
while (!left.empty()) {
distance.push(left.top());
for (int i = 0; i < m && !left.empty(); i++) {
left.pop();
}
}
// 오른쪽 힙에서 m개씩 그룹화하여 가장 먼 거리 저장
while (!right.empty()) {
distance.push(right.top());
for (int i = 0; i < m && !right.empty(); i++) {
right.pop();
}
}
int answer = 0;
// 가장 먼 거리는 한 번만 이동
if (!distance.empty()) {
answer += distance.top();
distance.pop();
}
// 나머지 거리는 왕복하므로 두 배씩 더함
while (!distance.empty()) {
answer += distance.top() * 2;
distance.pop();
}
cout << answer << '\n';
return 0;
}
#99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL