Skip to content

Latest commit

 

History

History
98 lines (69 loc) · 3.42 KB

taskC.md

File metadata and controls

98 lines (69 loc) · 3.42 KB

К оглавлению

Задача C. Лифты и перегородки.

Ограничение времени

  • 1 секунда

Ограничение памяти

  • 256 МБ


Костя подключен к мобильному оператору «Мобайл». Абонентская плата Кости составляет A рублей в месяц. За эту стоимость Костя получает B мегабайт интернет-трафика. Если Костя выйдет за лимит трафика, то каждый следующий мегабайт будет стоить ему C рублей. Костя планирует потратить D мегабайт интернет-трафика в следующий месяц. Помогите ему сосчитать, во сколько рублей ему обойдется интернет.

Формат входных данных

Вводится 4 целых положительных числа A,B,C,D(1≤A,B,C,D≤100) — стоимость тарифа Кости, размер тарифа Кости, стоимость каждого лишнего мегабайта, размер интернет-трафика Кости в следующем месяце. Числа во входном файле разделены пробелами.

Формат выходных данных

Выведите одно натуральное число — суммарные расходы Кости на интернет.

Замечание

В первом примере Костя сначала оплатит пакет интернета, после чего потратит на 55 мегабайт больше, чем разрешено по тарифу. Следовательно, за 55 мегабайт он дополняет отдельно, получившаяся стоимость 100+12×5=160 рублей.
Во втором примере Костя укладывается в тарифный план, поэтому платит только за него.

Примеры данных

Пример 1

Ввод
100 10 12 15

Вывод
160

Пример 2

Ввод
100 10 12 1

Вывод
100


Решение

import java.util.Arrays;
import java.util.Scanner;

/**
 * Задача C. Лифты и переговорки.
 */
public class Exercise3 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        int t = scanner.nextInt();
        int[] floors = new int[n];

        for (int i = 0; i < n; i++) {
            floors[i] = scanner.nextInt();
        }
        int k = scanner.nextInt();
        scanner.close();

        int max = Arrays.stream(floors).reduce(Integer::max).getAsInt();
        int min = Arrays.stream(floors).reduce(Integer::min).getAsInt();
        int dif = max - min;
        int res;

        int maxX = max - t;
        int minX = t + min;
        int x = floors[k - 1];

        if (minX >= x || maxX <= x) {
            res = max - min;
        } else {
            int toUp = dif + max - x;
            int toDown = dif + x - min;
            res = Math.min(toDown, toUp);
        }
        System.out.println(res);
    }
}