Решаю тестовые задачи в школу HH, открытые тесты все проходят, но не на их серваке, в чем ошибка то?
Разработчик Фёдор очень любит печеньки в офисе, и он точно знает все N мест, где их можно найти, а также точное количество печенек Сn в каждом месте. Сегодня Фёдор особенно голоден, он закончил большую задачу, и решает выделить себе M часов на то, чтобы съесть все печеньки в офисе.
Фёдор рассчитал минимальное количество печенек K, которое ему нужно съедать в течение часа так, чтобы в итоге успеть съесть все печеньки в офисе за выделенное время или раньше.
В каждый час, он может посетить одно любое место с печеньками и съесть K печенек в этом месте, он потратит на это целый час, даже если в этом месте осталось меньше, чем K печенек, потому что будет обсуждать с коллегами задачи и планы. Места без печенек Фёдор может не посещать.
Коллеги, из уважения к Фёдору, никогда не трогают его любимые печеньки
Входные данные (поступают в стандартный поток ввода)
Первая строка - целые числа N и M через пробел (1≤N≤100 000, 1≤M≤200 000)
Далее N строк, на каждой из которых одно целое число Cn (0≤Cn≤10 000)
Все входные данные наших тестов всегда соблюдают указанные параметры, дополнительные проверки не требуются
Выходные данные (ожидаются в стандартном потоке вывода)
Одно целое число, минимально возможное K. Либо 0, если в офисе нет печенек, или если Фёдор не успеет съесть все печеньки за выделенное время.
Пример 1
Ввод:
3 6
4
4
4
Вывод:
2
Простой пример для ознакомления с входными и выходными данными
Пример 2
Ввод:
3 6
4
4
5
Вывод:
3
Здесь похожая ситуация, но съедая по 2 печеньки, Фёдор не успеет съесть последнюю
Пример 3
Ввод:
3 3
6
6
8
Вывод:
8
Граничная ситуация при N = M
const countCookies = function (N, M, cookies) {
const allCookies = cookies.reduce((sum, acc) => sum + acc, 0);
let maxCookies = Number(Math.max.apply(null, cookies));
if (N === 0 || M < N) return 0;
let min = 1;
let max = maxCookies;
while (min < max) {
let K = Math.floor((min + max) / 2);
let sum = cookies.reduce((acc, c) => acc + Math.floor((c + K - 1) / K), 0);
if (sum <= M) max = K;
else min = K + 1;
}
return min;
};
console.log(countCookies(3, 6, [4,4,4])); // 2
console.log(countCookies(3, 6, [4,4,5])); // 3
console.log(countCookies(3, 3, [6,6,8])); // 8