Олімпіада#7503

Олімпіада (Розбір)

Всього на змагання прибуло s = \sum_{i=1}^n a_i учасників. Оскільки кожна аудиторія обладнана комп'ютерами, потрібно принаймні кімнат.

Нехай — найбільша кількість учасників в одній команді (максимальне значення серед усіх чисел a_i). Якщо p > ⌈s/m⌉, то потрібно принаймні кімнат.

Конструктивно можна показати, що завжди достатньо max(⌈s/m⌉, p) аудиторій для проведення олімпіади.

Приклад

На олімпіаду прибуло 2 + 3 + 4 + 1 + 2 = 12 школярів. Оскільки кожен клас обладнано комп'ютерами, для проведення олімпіади потрібно принаймні 12 / 3 = 4 класу.

Найбільша кількість учасників представляє третя команда — особи. Їх можна розсадити по одному в різні класи.

Наприклад, можлива наступна розсадка учасників:

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

Читаємо вхідні дані.

scanf("%d %d",&n,&m);

Обчислюємо загальну кількість учасників , а також розмір найбільшої команди.

p = 0;
for (i = 0; i < n; i++)
{
  scanf("%d",&x);
  s += x;
  if (x > p) p = x;
}

Значення res = ⌈s/m⌉ обчислюємо як (s + m - 1) / m.

res = (s + m - 1) / m;

Якщо p > ⌈s/m⌉, то відповіддю буде .

if (res < p) res = p;

Виводимо відповідь.

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