Ctrl K

Отличники для подтягивания групп

Средняя
В школе несколько учебных групп, и у каждой скоро экзамен. Про группу i известно groups[i] = [p, t]: в ней t учеников, и экзамен сдадут ровно p из них. Доля сдавших в группе равна p / t. Есть ещё helpers новых отличников — каждый точно сдаст экзамен в той группе, куда его запишут (и увеличит в ней и число учеников, и число сдавших на 1). Распределите всех отличников по группам так, чтобы среднее арифметическое долей сдавших по всем группам стало как можно больше, и верните это среднее. Ответ принимается, если он отличается от точного не больше чем на 10⁻⁵.
Пример 1
groups=[[1, 3], [4, 4]], helpers=1 → 0.75

Во второй группе и так сдают все, поэтому отличника отправляем в первую: (2/4 + 4/4) / 2 = 0.75.

Пример 2
groups=[[2, 5], [1, 2]], helpers=2 → 0.5833333333333333

Выгоднее всего по одному в каждую группу: (3/6 + 2/3) / 2 ≈ 0.58333. Оба в первую дают ≈ 0.53571, оба во вторую — 0.575.

Ограничения
  • 1 ≤ len(groups) ≤ 10⁵
  • groups[i] = [p, t], 1 ≤ p ≤ t ≤ 10⁵
  • 1 ≤ helpers ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСтудии для записи СредняяЗадания с перерывом на остывание СредняяСерии подряд идущих чисел СредняяМетки вразнобой СредняяСращивание верёвок Средняя
загружаем Python…
Вход
groups=[[1, 3], [4, 4]], helpers=1
Ожидается
0.75

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 101 тест на сервере, включая скрытые.