AtCoderのARC
次のARCの問題へ
前のARCの問題へ
ARC143-A Three Integers
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 2 3");
//3
}
else if (InputPattern == "Input2") {
WillReturn.Add("0 0 1");
//-1
}
else if (InputPattern == "Input3") {
WillReturn.Add("0 0 0");
//0
}
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();
Array.Sort(wkArr);
long A = wkArr[0];
long B = wkArr[1];
long C = wkArr[2];
C -= B;
C -= A;
if (C > 0) {
Console.WriteLine(-1);
return;
}
Console.WriteLine(wkArr[2]);
}
}
解説
対称性により
A <= B <= C
とします。
A = 2 , B = 5 , C = 10
で、帯グラフで考えると下記になります。
■■
■■■■■
■■■■■■■■■■
最大値を、最大値以外の2つのどちらかと共に、
1減算していき、A,B,Cを(0以上で)均一にできるかなので
Cを、AとBを使って0にできるかを判定してます。
A,B,Cを0にできる場合は、
Cの値が、最小の操作回数になります。