1. Главная
  2. Библиотека
  3. Программирование
  4. Ингус учится программировать. В каждый момент времени о...
Разбор задачи

Ингус учится программировать. В каждый момент времени он может описать свои способности некоторым натуральным числом . Также для каждой задачи он знает её уровень сложности . Ингус может решить некоторую задачу, если . При этом, если он решает задачу, он

  • Предмет: Программирование
  • Автор: Кэмп
  • #Основы алгоритмизации и программирования
  • #Структуры и алгоритмы обработки данных
Ингус учится программировать. В каждый момент времени он может описать свои способности некоторым натуральным числом . Также для каждой задачи он знает её уровень сложности . Ингус может решить некоторую задачу, если . При этом, если он решает задачу, он

Условие:

Ингус учится программировать. В каждый момент времени он может описать свои способности некоторым натуральным числом $X$. Также для каждой задачи он знает её уровень сложности $Y$. Ингус может решить некоторую задачу, если $X \ge Y$. При этом, если он решает задачу, он получает новый опыт: его уровень $X$ увеличивается на 1.

На день рождения Ингусу подарили учебник по программированию, в котором задачи расположены в некотором порядке и для каждой из них известна её сложность. Он хочет решить все задачи в этом учебнике.

В очередной день он пробует решить не более, чем $M$ первых еще не решенных задач (он решает задачи по порядку и, если у него не получается решить очередную задачу, то он пропускает ее). Если в какой-то из дней у него не получилось решить ни одной задачи, то он очень расстраивается и уходит из спортивного программирования. Например, если $M=3$, его начальный уровень $X=1$ и ему подарили учебник с задачами следующей сложности: 3, 1, 7, 2, 4, 3, 9, то его действия будут следующими:

1) В первый день он будет пробовать решать задачи сложностей 3, 1, 7. Он решит задачу сложности 1 и $X$ станет равен 2.

2) Во второй день будет решать задачи сложностей 3, 7, 2. Решит задачу сложности 2 и $X$ увеличится до 3.

3) В третий день будет решать задачи сложностей 3, 7, 4. Решит задачи сложности 3 и 4 и $X$ увеличится до 5.

4) В четвертый день будет решать задачи сложностей 7, 3, 9. Решит задачу сложности 3 и $X$ увеличится до 6.

5) В пятый день будет решать задачи сложности 7, 9. Он ничего не решит и уйдет из спорт проги :(

Ингусу все таки не хочется уходить из спортивного программирования, поэтому он хочет узнать минимальный необходимый начальный уровень опыта, чтобы он смог решить все задачи. Также ему хочется узнать, сколько дней займет у него решение всех задач этой книги, если он начнет решать с $X$ равному этому минимальному необходимому значению.

Входные данные

В первой строке записаны два числа $1 \le N \le 5 \cdot 10^5$ — количество задач в учебнике и $1 \le M \le 5 \cdot 10^5$ — то сколько первых нерешенных задач он может рассматривать в очередной день. Далее во второй строке записаны $n$ чисел $1 \le d_i \le 2 \cdot 10^9$, описывающие сложности задач.

Выходные данные

Выведите два числа в одной строке: минимальный необходимый уровень опыта $X$ и количество дней, которые потребуются, чтобы решить все задачи, если начинать с уровнем опыта $X$.

Решение:

Обозначения и условие задачи:
Дан массив сложностей задач d[0..N–1] (задан в порядке книги). У Ингуса изначальный опыт равен X – некоторое натуральное число. Он действует по следующему алгоритму: каждый день он рассматривает первые
  min(M, число ещё не решённых задач)
задач из книги (то есть остаётся порядок относительно исходного) и пытается решить их по порядку.
При попытке решить задачу с сложностью Y он справляется, если на момент попытки текущий опыт ≥ Y. При решении задачи опыт увеличивается на 1. Если в течение дня ни одна задача не решена, Ингус «выходит»...

Внутри — полный разбор, аргументация, алгоритм решения, частые ошибки и как отвечать на каверзные вопросы препода, если спросит

Попробуй решить по шагам

Попробуй один шаг и продолжи в режиме обучения или посмотри готовое решение

Какое свойство функции "решаемость" (возможность решить все задачи при заданном начальном уровне опыта) позволяет использовать бинарный поиск для нахождения минимального начального уровня?

Что нужно знать по теме:

Что нужно знать по теме

Алгоритм решения

Топ 3 ошибок

Что спросит препод

Выбери предмет