トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

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);
    }
}


解説

裏のコインを優先して、ひっくり返してます。