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の組み合わせを全探索してます。