トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
ARC-056-A みんなでワイワイみかん
■■■問題■■■
高橋くん一家では今シーズンの果物がみかんに決まり、K個のみかんを買うことが決まりました。
みかんは1個A円、さらにL個のセットでB円で売っています。
1個のみかんとL個のセットをそれぞれいくつか買い、
合計でK個以上のみかんを買うとき、払うお金の最小値を求めるプログラムを書いてください。
■■■入力■■■
A B K L
●1 <= A,B,K <= 10億
●2 <= L <= 10億
●B <= A*L
■■■出力■■■
1行目に、少なくともK個のみかんを買うために必要なお金を出力せよ。
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 7 10 3");
//24
//3個のセットを3つ、1個のみかんを1つ買うと合計24円となる。
//これより安く10個のみかんを買う方法はない。
}
else if (InputPattern == "Input2") {
WillReturn.Add("4 5 11 3");
//20
//3個のセットを4つ買うのが最適である
}
else if (InputPattern == "Input3") {
WillReturn.Add("3 8 3 3");
//8
}
else if (InputPattern == "Input4") {
WillReturn.Add("3 8 2 3");
//6
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long[] wkArr = InputList[0].Split(' ').Select(X => long.Parse(X)).ToArray();
long A = wkArr[0];
long B = wkArr[1];
long K = wkArr[2];
long L = wkArr[3];
long Answer = 0;
long Rest = K;
//セットで買える分だけ買う
if (Rest >= L) {
Answer += B * (K / L);
Rest %= L;
}
if (Rest > 0) {
//セットで買う場合
long wkSum1 = B;
//バラで買う場合
long wkSum2 = A * Rest;
Answer += Math.Min(wkSum1, wkSum2);
}
Console.WriteLine(Answer);
}
}
解説
最初にセットで買える分だけ買ってから、
残りの分で、セットかバラの、どっちが得かを判定してます。