トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
No.156 キャンディー・ボックス
■■■問題■■■
キャンディーが入っている箱がN個ある。
i番目の箱にはCi個のキャンディーが入っている。
A君は、その時の最もキャンディーの少ない箱から1つキャンディーを取っていく。
これを合計M個のキャンディーを取り終えるまで繰り返す。
M個のキャンディーを取り出した時に、空になった箱の数はいくつか?
■■■入力■■■
N M
C1 C2 ・・・ CN
1 <= N <= 10
1 <= M <= 100万
1 <= Ci <= 10万
Mは最初のキャンディーの総数以下の数字が与えられる。
■■■出力■■■
M個のキャンディーを取ったあとに空になった箱の数を1行で答えよ。
最後に改行を忘れずに。
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "Input5";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("3 2");
WillReturn.Add("1 2 3");
//1
//キャンディーの箱が3つある。
//1つ目の箱にはキャンディーが1つ。
//2つめの箱にはキャンディーが2つ。
//3つめの箱にはキャンディーが3つ。
//A君はこれから合計2つのキャンディーを取る。
//A君はまず1つのキャンディーが入った箱からキャンディーを1つ取る。
//次に、キャンディーが2つ入った箱からキャンディーを1つ取る。
//1つ目の箱にはキャンディーが0つ。
//2つめの箱にはキャンディーが1つ。
//3つめの箱にはキャンディーが3つ。
//最後に残った空のキャンディーの箱の数は1個である。
}
else if (InputPattern == "Input2") {
WillReturn.Add("3 2");
WillReturn.Add("1 1 3");
//2
//キャンディーの箱が3つある。
//1つ目の箱にはキャンディーが1つ。
//2つめの箱にはキャンディーが1つ。
//3つめの箱にはキャンディーが3つ。
//A君はこれから合計2つのキャンディーを取る。
//A君はまず1つのキャンディーが入った箱からキャンディーを1つ取る。
//次に、もう1つのキャンディーが1つ入った箱からキャンディーを1つ取る。
//1つ目の箱にはキャンディーが0つ。
//2つめの箱にはキャンディーが0つ。
//3つめの箱にはキャンディーが3つ。
//最後に残った空のキャンディーの箱の数は2個である。
}
else if (InputPattern == "Input3") {
WillReturn.Add("4 10");
WillReturn.Add("3 2 4 1");
//4
//すべての箱が空になる
}
else if (InputPattern == "Input4") {
WillReturn.Add("6 257109");
WillReturn.Add("53771 46578 31908 80435 62678 4327");
//5
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int M = InputList[0].Split(' ').Select(X => int.Parse(X)).Last();
int[] CArr = InputList[1].Split(' ').Select(X => int.Parse(X)).ToArray();
Array.Sort(CArr);
int TatalCnt = 0;
for (int I = 0; I <= CArr.GetUpperBound(0); I++) {
TatalCnt += CArr[I];
if (TatalCnt > M) {
Console.WriteLine(I);
break;
}
else if (TatalCnt == M) {
Console.WriteLine(I + 1);
break;
}
}
}
}
解説
ナイーブに解いてます。