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)