AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC117-C Streamline
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("2 5");
WillReturn.Add("10 12 1 2 14");
//5
}
else if (InputPattern == "Input2") {
WillReturn.Add("3 7");
WillReturn.Add("-10 -3 0 9 -100 2 17");
//19
}
else if (InputPattern == "Input3") {
WillReturn.Add("100 1");
WillReturn.Add("-100000");
//0
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = InputList[0].Split(' ').Select(pX => int.Parse(pX)).ToArray();
int N = wkArr[0];
int[] XArr = InputList[1].Split(' ').Select(pX => int.Parse(pX)).ToArray();
Array.Sort(XArr);
var DiffList = new List<int>();
for (int I = 0; I <= XArr.GetUpperBound(0) - 1; I++) {
DiffList.Add(XArr[I + 1] - XArr[I]);
}
long Answer = 0;
foreach (int EachInt in DiffList.OrderByDescending(pX => pX).Skip(N - 1)) {
Answer += EachInt;
}
Console.WriteLine(Answer);
}
}
解説
ソートした
1 2 10 12 14
という状態で、各駒は右にしか移動できないと考えます。
N個の駒があるので、
各駒が移動しない区間を
距離の長いほうから(N-1)個を選び、
選ばなかった区間の距離の合計が解になります。