トップページに戻る
   次の競技プログラミングの問題へ
   前の競技プログラミングの問題へ
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);
    }
}
解説
裏のコインを優先して、ひっくり返してます。