Problem:
Score : 300 points

Problem Statement

There are N candles placed on a number line.
The i-th candle from the left is placed on coordinate x_i.
Here, x_1 < x_2 < ... < x_N 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 \leq N \leq 10^5

1 \leq K \leq N

x_i is an integer.

|x_i| \leq 10^8

x_1 < x_2 < ... < x_N

Input

Input is given from Standard Input in the following format:

N K
x_1 x_2 ... x_N

Output

Print the minimum time required to light K candles.

Sample Input 1

5 3
-30 -10 10 20 50

Sample Output 1

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.

Sample Input 2

3 2
10 20 30

Sample Output 2

20

Sample Input 3

1 1
0

Sample Output 3

0

There may be a candle placed at coordinate 0.

Sample Input 4

8 5
-9 -7 -4 -3 1 2 3 4

Sample Output 4

10

Solution in C# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class MainClass
{
	public const long Giri = 1000000007;

	
	public static void Main(string[] args)
	{
		var q = Input().ToInt();
		var o = Input();
		var n = q[0];
		var k = q[1];
		var x = new long[n + 2];
		int plusFirst = -1;
		x[0] = -999999999999;
		x[n+1] = 999999999999;
		int i = 1;
		for(; i < n; i++)
		{
			x[i] = o[i].ToLong();
			if(plusFirst == -1 && x[i] >= 0)
				plusFirst = i;
		}
		
		if(plusFirst == -1)
		{
			Console.WriteLine(-x[n-k+1]);
			return;
		}
		if(plusFirst == 1)
		{
			Console.WriteLine(x[k]);
			return;
		}
		
		i = plusFirst;
		int j = plusFirst-1;
		int m = 0;
		//Console.WriteLine(x[i]);
		
		for(;m < k;)
		{
			var d1 = x[j];
			var d2 = x[i];
			if(-d1 < d2)
			{
				m++;
				j--;
				
			}
			else
			{
				m++;
				i++;
				
			}
		}
		if(j+1 == i-1)
		{
			Console.WriteLine(Math.Abs(x[j+1]));
		}
		else if(-x[j+1] < x[i-1])
		{
			Console.WriteLine((x[j+1] * -2) + x[i-1]);
		}
		else
		{
			Console.WriteLine(x[i-1] * 2 - x[j+1]);
		}

	}


	static long GCD(long a, long b)
	{
		var v = new[] { a, b };
		while (v[1] != 0) { v = new[] { v[1], v[0] % v[1] }; }
		return v[0];
	}
	public static string[] Input() { return Console.ReadLine().Split(' '); }
	public static int Clamp(int val, int max, int min = 0) { return Math.Min(max, Math.Max(min, val)); }
}

public static class Smarter
{
	public static int ToInt(this string str) { return int.Parse(str); }
	public static long ToLong(this string str) { return long.Parse(str); }
	public static int[] ToInt(this string[] str)
	{
		var r = new int[str.Length];
		for(int i = 0; i < str.Length; i++) r[i] = str[i].ToInt();
		return r;
	 }
}