結果

問題 No.453 製薬会社
ユーザー 14番14番
提出日時 2016-12-09 12:58:33
言語 C#(csc)
(csc 3.9.0)
結果
AC  
実行時間 30 ms / 2,000 ms
コード長 2,392 bytes
コンパイル時間 788 ms
コンパイル使用メモリ 115,948 KB
実行使用メモリ 29,564 KB
最終ジャッジ日時 2024-11-28 16:17:25
合計ジャッジ時間 1,999 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 27 ms
25,424 KB
testcase_01 AC 28 ms
27,384 KB
testcase_02 AC 29 ms
29,564 KB
testcase_03 AC 29 ms
25,548 KB
testcase_04 AC 29 ms
25,676 KB
testcase_05 AC 30 ms
25,228 KB
testcase_06 AC 30 ms
25,264 KB
testcase_07 AC 29 ms
25,392 KB
testcase_08 AC 28 ms
27,340 KB
testcase_09 AC 29 ms
25,480 KB
testcase_10 AC 28 ms
25,492 KB
testcase_11 AC 29 ms
25,268 KB
testcase_12 AC 29 ms
25,424 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #

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

public class Program
{
    public void Proc() {
        Reader.IsDebug = false;
        decimal[] inpt = Reader.ReadLine().Split(' ').Select(a=>decimal.Parse(a)).ToArray();
        C = inpt[0] * 2800;
        D = inpt[1] * 2800;

        decimal aCount = GetACount(0, Math.Min(C/21, D/7));


        decimal ans = this.GetKingaku(aCount);
        Console.WriteLine(ans);


    }

    private decimal C;
    private decimal D;

    private decimal GetACount(decimal min, decimal max) {
        if(max-min < 0.00000000001m / 28) {
            return Math.Round(min, 8);
        }
        decimal idx1 = min+((max-min)/3);
        decimal idx2 = max-((max-min)/3);

        decimal valMin = GetKingaku(min);
        decimal val1 = GetKingaku(idx1);
        decimal val2 = GetKingaku(idx2);
        decimal valMax = GetKingaku(max);

        decimal mx = new decimal[]{valMin, val1, val2, valMax}.Max();
        if(valMin == mx) {
            return GetACount(min, idx1);
        } else if(valMax == mx) {
            return GetACount(idx2, max);
        } else if(val1 == mx) {
            return GetACount(min, idx2);
        } else {
            return GetACount(idx2, max);
        }
    }

    private decimal GetKingaku(decimal aCount) {
        /*
        ・製品Aを作るには1kgあたり薬品Cが34kg、薬品Dが14kg必要である。
        ・製品Bを作るには1kgあたり薬品Cが27kg、薬品Dが57kg必要である。
        */

        decimal nokoriC = this.C - (3*7*aCount);
        decimal nokoriD = this.D - (1*7*aCount);


        decimal bCount = Math.Min(nokoriC / (2*4), nokoriD / (5*4));
        return aCount * 10 + bCount * 20;

    }



    public class Reader {
        public static bool IsDebug = true;
        private static System.IO.StringReader SReader;
        private static string InitText = @"



5 6


";
        public static string ReadLine() {
            if(IsDebug) {
                if(SReader == null) {
                    SReader = new System.IO.StringReader(InitText.Trim());
                }
                return SReader.ReadLine();
            } else {
                return Console.ReadLine();
            }
        }

    }
    public static void Main(string[] args)
    {
        Program prg = new Program();
        prg.Proc();
    }
}
0