トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
ARC-041-A コインの反転
■■■問題■■■
表向きのコインがx枚、裏向きのコインがy枚ある。
高橋君はちょうどk枚のコインを選び、それらすべてをひっくり返す。
その結果、表向きのコインは最大で何枚になるか?
■■■入力■■■
x y
k
●1行目には、表向きのコインの枚数 x (1 <= x <= 100万)、裏向きのコインの枚数 y (1 <= y <= 100万)
が空白区切りで与えられる。
●2行目には、ひっくり返すコインの枚数 k (1 <= k <= x+y) が与えられる。
■■■出力■■■
コインをひっくり返した結果、表向きのコインは最大で何枚になるか1行に出力せよ。
出力の末尾に改行を入れること。
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("3 2");
WillReturn.Add("1");
//4
//裏向きのコインを1枚ひっくり返せばよい
}
else if (InputPattern == "Input2") {
WillReturn.Add("3 2");
WillReturn.Add("4");
//3
//表向きのコインを2枚、
//裏向きのコインを2枚ひっくり返せばよい
}
else if (InputPattern == "Input3") {
WillReturn.Add("3 2");
WillReturn.Add("5");
//2
//すべてのコインをひっくり返すしかない
}
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(A => int.Parse(A)).ToArray();
int X = wkArr[0];
int Y = wkArr[1];
int K = int.Parse(InputList[1]);
int Answer;
if (K <= Y) {
Answer = X + K;
}
else {
Answer = Y;
int RestCnt = K - Y;
Answer += X - RestCnt;
}
Console.WriteLine(Answer);
}
}
解説
裏のコインを優先して、ひっくり返してます。