4857. Олимпиада в Хогвардсе

 

В Хогвартсе проходит традиционная ежегодная олимпиада по теории магии среди младшекурсников. Завхозу школы, Аргусу Филчу, поручено распределить студентов по аудиториям.

Каждый факультет выставил на олимпиаду своих лучших учеников: от Гриффиндора участвуют g студентов, от Слизеринаs студентов, Пуффендуй представляет h студентов, а Когтевранr студентов. В распоряжении Филча имеется m аудиторий.

На аудитории наложено особое заклятие расширения, благодаря которому каждая аудитория может вместить любое количество студентов. Однако необходимо учитывать, что ученики одного факультета, оказавшиеся в одной аудитории, могут воспользоваться возможностью для жульничества, обмениваясь идеями по решению задач. Поэтому количество студентов одного факультета в одной аудитории должно быть минимально возможным.

Назовём рассадку оптимальной, если она минимизирует максимальное количество студентов одного факультета в любой аудитории.

Определите, какое минимальное количество студентов одного факультета Филчу всё же придётся посадить в одну аудиторию даже при оптимальной рассадке.

 

Вход. Первая строка содержит четыре целых числа g, s, h и r (1 ≤ g, s, h, r ≤ 1000) – количество учеников, представляющих факультеты Гриффиндор, Слизерин, Пуффендуй и Когтевран соответственно.

Во второй строке задано одно целое число m (1 ≤ m ≤ 1000) – количество доступных аудиторий.

 

Выход. Выведите одно целое числоминимальное возможное количество студентов одного факультета в одной аудитории при оптимальной рассадке.

 

Пример входа 1

Пример выхода 1

4 3 4 4

2

2

 

 

Пример входа 2

Пример выхода 2

15 14 13 14

5

3

 

 

РЕШЕНИЕ

условный оператор

 

Анализ алгоритма

На самом крупном факультете учится mx = max(g, s, h, r) студентов. Если попытаться равномерно распределить их по m аудиториям, то в какой-то из них окажется не менее  студентов. Именно такое минимальное количество студентов одного факультета придётся посадить в одну аудиторию даже при оптимальной рассадке.

 

Реализация алгоритма

Читаем входные данные.

 

scanf("%d %d %d %d", &g, &s, &h, &r);

scanf("%d", &m);

 

Вычисляем mx = max(gshr).

 

mx = g;

if (s > mx) mx = s;

if (h > mx) mx = h;

if (r > mx) mx = r;

 

Определим максимальное количество студентов, которое может оказаться в одной аудитории: res = .

 

res = mx / m;

if (mx % m > 0) res++;

 

Выводим ответ.

 

printf("%d\n", res);

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int g = con.nextInt();

    int s = con.nextInt();  

    int h = con.nextInt();

    int r = con.nextInt();

    int m = con.nextInt();

   

    int mx = g;

    if (s > mx) mx = s;

    if (h > mx) mx = h;

    if (r > mx) mx = r;

 

    int res = mx / m;

    if (mx % m > 0) res++;

    System.out.println(res);

    con.close();

  }

}

 

Python реализация

Читаем входные данные.

 

a = list(map(int, input().split()))

m = int(input())

 

Вычисляем и выводим ответ.

 

print((max(a) - 1) // m + 1)