AtCoderのABC    次のABCの問題へ    前のABCの問題へ

ABC051-B Sum of Three Integers

■■■問題■■■

2つの整数K,Sが与えられます。
3つの変数X,Y,Zがあり、0 <= X,Y,Z <= K を満たす整数の値を取ります。
X+Y+Z=S を満たす X,Y,Z への値の割り当ては何通りありますか。

■■■入力■■■

K S

●2 <= K <= 2500
●0 <= S <= 3K
●K,S は整数である。

■■■出力■■■

問題文の条件を満たす X,Y,Z の組が何通りあるか出力せよ。


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "Input1";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("2 2");
            //6
            //問題文の条件を満たす X,Y,Z の組は以下の6通りです。
            //●X=0,Y=0,Z=2
            //●X=0,Y=2,Z=0
            //●X=2,Y=0,Z=0
            //●X=0,Y=1,Z=1
            //●X=1,Y=0,Z=1
            //●X=1,Y=1,Z=0
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("5 15");
            //1
            //X+Y+Z の最大値は15であり、
            //それを満たす組は1通りです。
        }
        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(X => int.Parse(X)).ToArray();

        int K = wkArr[0];
        int S = wkArr[1];

        int Answer = 0;
        for (int X = 0; X <= K; X++) {
            for (int Y = 0; Y <= K; Y++) {
                int Z = S - X - Y;
                if (Z < 0) break;
                if (Z > K) continue;
                Answer++;
            }
        }
        Console.WriteLine(Answer);
    }
}


解説

XとYの組み合わせを全探索してます。