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

ABC-031-A ゲーム

■■■問題■■■

高橋君は新しくゲームを買った。

高橋君のゲームキャラクターには攻撃力と防御力が定まっており、
レベルが上がると攻撃力と防御力のうち好きなひとつを1だけ上げることができる。

高橋君はゲームキャラクターの攻撃力と防御力の積が最大となるように
攻撃力か防御力のうちひとつを選んで上げる。
もしもどちらを選んでもレベルアップ後の攻撃力と防御力の積が等しくなる場合、
攻撃力を選んで上昇させる。

高橋君がゲームキャラクターをレベルアップさせた場合の、レベルアップ後の攻撃力と防御力の積を求めよ。

■■■入力■■■

A D

1行目には、2個の整数 A(1 <= A <= 200), D(1 <= D <= 200) が空白区切りで与えられる。
これは、ゲームキャラクターの攻撃力がAで、防御力がDであることを表す。

■■■出力■■■

高橋君がゲームキャラクターをレベルアップさせた後の、
ゲームキャラクターの攻撃力と防御力の積を1行に出力せよ。
出力の末尾にも改行を入れること。


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("31 87");
            //2784
            //高橋君のキャラクターは、レベルアップ前において攻撃力が31、防御力は87である。
            //攻撃力を上昇させた場合、攻撃力と防御力の積は (31+1) * 87 = 2784 である。
            //防御力を上昇させた場合、攻撃力と防御力の積は 31 * (87+1) = 2728 である。
            //高橋君は攻撃力を上げる選択を取るので、
            //レベルアップ後のキャラクターにおける攻撃力と防御力の積は2784である。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("101 65");
            //6666
            //この場合、高橋君は防御力を上げる
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("3 3");
            //12
        }
        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 A = wkArr[0];
        int D = wkArr[1];

        int Prod1 = (A + 1) * D;
        int Prod2 = A * (D + 1);
        Console.WriteLine(Math.Max(Prod1, Prod2));
    }
}


解説

攻撃力を上げた場合と、
防御力を上げた場合の2通りを比較してます。