AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC052-D Walk and Teleport
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("4 2 5");
WillReturn.Add("1 2 5 7");
//11
}
else if (InputPattern == "Input2") {
WillReturn.Add("7 1 100");
WillReturn.Add("40 43 45 105 108 115 124");
//84
}
else if (InputPattern == "Input3") {
WillReturn.Add("7 1 2");
WillReturn.Add("24 35 40 68 72 99 103");
//12
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long[] wkArr = InputList[0].Split(' ').Select(pX => long.Parse(pX)).ToArray();
long A = wkArr[1];
long B = wkArr[2];
long[] XArr = InputList[1].Split(' ').Select(pX => long.Parse(pX)).ToArray();
long Answer = 0;
for (int I = 1; I <= XArr.GetUpperBound(0); I++) {
long Kouho1 = (XArr[I] - XArr[I - 1]) * A;
long Kouho2 = B;
Answer += Math.Min(Kouho1, Kouho2);
}
Console.WriteLine(Answer);
}
}
解説
1-2-3
という小さいケースで考察すると
1,3,2の順に訪問する場合は、
1から3にテレポートしてから
3から2に徒歩が考えられますが、
これは、1から2にテレポートして、
2から3に移動するのと同じコストです。
結局のところ、
小さい番号から順に訪問すれば良く、
それぞれの移動で徒歩とテレポートの
コストが小さい方を選択すれば解になります。