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

ARC-026-A ダイナミックなポーズ

■■■問題■■■

高橋君はプログラミングコンテストに参加しようとしています。
このコンテストでは簡単な問題がN問出題されます。

高橋君は普段1問あたりA分で解くことが出来ますが、
ダイナミックなポーズをとりながら問題を解くことで
1問あたりB分で解くことが出来るようになります。

ただし、ダイナミックなポーズには体力を著しく消耗してしまうので、
1回のプログラミングコンテストでは
5問までしかダイナミックなポーズをとりながら解くことができません。

高橋君は最短何分でN問の問題を全て解くことが出来るでしょうか。

■■■入力■■■

N A B

1行目には、問題数を表した整数 N(1 <= N <= 10) と、
高橋君が普段1問の問題を解くためにかかる時間を分単位で表した整数 A(2 <= A <= 60) と、
高橋君がダイナミックなポーズをとりながら
1問の問題を解くためにかかる時間を分単位で表した整数 B(1 <= B < A) が空白区切りで与えられる。 

■■■出力■■■

最短時間で高橋君が全ての問題を解いたときにかかる時間を分単位で表した整数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("10 5 1");
            //30
            //このケースでは、5問をダイナミックなポーズをとりながら解き、
            //残りの5問を普段通りに解くことによって
            //合計30分で全ての問題を解くことが出来ます。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("4 60 7");
            //28
            //このケースでは、
            //全ての問題をダイナミックなポーズをとりながら解くことが出来ます。
        }
        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 N = wkArr[0];
        int A = wkArr[1];
        int B = wkArr[2];

        int Answer = 0;
        for (int I = 1; I <= N; I++) {
            if (I <= 5) Answer += B;
            else Answer += A;
        }
        Console.WriteLine(Answer);
    }
}


解説

For文を使って、ナイーブに解いてます。