问题 C: Candles

时间限制: 1 Sec  内存限制: 128 MB

题目描述

There are N candles placed on a number line. The i-th candle from the left is placed on coordinate xi. Here, x1<x2<…<xN holds.
Initially, no candles are burning. Snuke decides to light K of the N candles.
Now, he is at coordinate 0. He can move left and right along the line with speed 1. He can also light a candle when he is at the same position as the candle, in negligible time.
Find the minimum time required to light K candles.
Constraints
1≤N≤105
1≤K≤N
xi is an integer.
|xi|≤108
x1<x2<…<xN

 

输入

Input is given from Standard Input in the following format:

N K
x1 x2 … xN

 

输出

Print the minimum time required to light K candles.

 

样例输入

复制样例数据

5 3
-30 -10 10 20 50

样例输出

40

 

提示

He should move and light candles as follows:

  • Move from coordinate 0 to −10.
  • Light the second candle from the left.
  • Move from coordinate −10 to 10.
  • Light the third candle from the left.
  • Move from coordinate 10 to 20.
  • Light the fourth candle from the left.
/**/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <queue>

typedef long long LL;
using namespace std;

int n, k;
int a[100005];

int min(int x, int y){
	return x < y ? x : y;
}

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);

	scanf("%d %d", &n, &k);
	for (int i = 1; i <= n; i++){
		scanf("%d", &a[i]);
		//if(a[i] < 0) a[i] = a[i] * 2;
	}
	int ans = 0x3f3f3f3f;
	for (int i = k; i <= n; i++){
		ans = min(ans, a[i] - a[i - k + 1] + min(abs(a[i]), abs(a[i - k + 1])));
	}
	printf("%d\n", ans);

	return 0;
}
/**/