Problem:
水道料金 (Water Rate)

問題

JOI 君が住んでいる地域には水道会社が X 社と Y 社の 2 つある．2 つの会社の 1 ヶ月の水道料金は，1 ヶ月の水道の使用量に応じて次のように決まる．

X 社： 1 リットル あたり A 円かかる．

Y 社： 基本料金は B 円である．使用量が C リットル以下ならば，料金は基本料金 B 円のみがかかる．使用量が C リットルを超えると基本料金 B 円に加えて追加料金がかかる．追加料金は使用量が C リットルを 1 リットル超えるごとに D 円である．

JOI 君の家では 1 ヶ月の水道の使用量が P リットルである．

水道料金ができるだけ安くなるように水道会社を選ぶとき，JOI 君の家の 1 ヶ月の水道料金を求めよ．

入力

入力は 5 行からなり，1 行に 1 つずつ整数が書かれている．

1 行目には X 社の 1 リットルあたりの料金 A が書かれている．

2 行目には Y 社の基本料金 B が書かれている．

3 行目には Y 社の料金が基本料金のみになる使用量の上限 C が書かれている．

4 行目には Y 社の 1 リットルあたりの追加料金 D が書かれている．

5 行目には JOI 君の家の 1 ヶ月の水道の使用量 P が書かれている．

書かれている整数 A, B, C, D, P はすべて 1 以上 10000 以下である．

出力

JOI 君の家の 1 ヶ月の水道料金を表す整数を 1 行で出力せよ．

入出力例

入力例 1

9
100
20
3
10

出力例 1

90

入力例 2

8
300
100
10
250

出力例 2

1800

入出力例 1 では，JOI 君の家の 1 ヶ月の水道の使用量は 10 リットルである．

X 社の水道料金は 9 × 10 = 90 円である．

JOI 君の家の 1 ヶ月の水道の使用量は 20 リットル以下なので，Y 社の水道料金は基本料金の 100 円である．

JOI 君の家は水道料金がより安い X 社を選ぶ．そのときの JOI 君の家の 1 ヶ月の水道料金は 90 円である．

入出力例 2 では，JOI 君の家の 1 ヶ月の水道の使用量は 250 リットルである．

X 社の水道料金は 8 × 250 = 2000 円である．

JOI 君の家の 1 ヶ月の水道の使用量は 100 リットル以上で，超過量は 250 - 100 = 150 リットルである．よって，Y 社の水道料金は基本料金の 300 円に加えて 10 × 150 = 1500 円の追加料金がかかり，合計の水道料金は 300 + 1500 = 1800 円である．

JOI 君の家は水道料金がより安い Y 社を選ぶ．そのときの JOI 君の家の 1 ヶ月の水道料金は 1800 円である．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {


	public static void main(String[] args) throws IOException {
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

		//get
		int companyXFeeRate = Integer.parseInt(bufferedReader.readLine());
		int companyYBase = Integer.parseInt(bufferedReader.readLine());
		int companyYLimit = Integer.parseInt(bufferedReader.readLine());
		int companyYAdd = Integer.parseInt(bufferedReader.readLine());
		int usedWater = Integer.parseInt(bufferedReader.readLine());

		int companyXFee = companyXFeeRate * usedWater;
		int companyYFee = 0;

		if(companyYLimit < usedWater) {
			int over = usedWater - companyYLimit;
			companyYFee = companyYBase + companyYAdd * over;
		} else {
			companyYFee = companyYBase;
		}

		System.out.println(companyXFee < companyYFee ? companyXFee : companyYFee);
	}

	public static String getStringCharAt(String str, int position) {
		return String.valueOf(str.charAt(position));
	}

	public static String[] getStringCharArr(String str) {

		String[] arrResult = new String[str.length()];

		for(int i = 0; i < str.length(); i++) arrResult[i] = getStringCharAt(str, i);

		return arrResult;
	}

	public static boolean isInnerPosition(int x1, int x2, int searchPosition) {
		return x1 <= searchPosition && searchPosition <= x2;
	}

}