Задать вопрос
@Vetka_in_code

В чем ошибка в задаче hh #1?

Решаю тестовые задачи в школу 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
  • Вопрос задан
  • 426 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Например, не соблюдается условие "0, если в офисе нет печенек":
countCookies(3, 6, [0, 0, 0]); // 1
Некорректная проверка, должно быть 2.
countCookies(3, 2, [0, 2, 2]); // 0
Ну и пара стилистических правок
- const allCookies = cookies.reduce((sum, acc) => sum + acc, 0);
- let maxCookies = Number(Math.max.apply(null, cookies));
+ const maxCookies = Math.max(...cookies);
- let sum = cookies.reduce((acc, c) => acc + Math.floor((c + K - 1) / K), 0);
+ const sum = cookies.reduce((acc, c) => acc + Math.ceil(c / K), 0);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽