Муниципальный этап ВсОШ по информатике в Липецкой области 2023 (9-11 классы)
1. Очередная задача про математику
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Никита известен тем, что он отлично знает школьную программу по математике и умеет решать линейные уравнения любого уровня сложности. Для того, чтобы заинтересовать юного математика, учитель написал на доске два целых числа $$$a$$$ и $$$b$$$ и дал школьнику следующую задачу.

Учитель разрешил Никите не более, чем $$$k$$$ раз выполнить одно из следующих действий:

  1. Увеличить число $$$a$$$ на единицу;
  2. Увеличить число $$$b$$$ на единицу.

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

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

Первая строка содержит одно целое число $$$a$$$ ($$$1 \le a \le 10^{18}$$$) — первое число, которое учитель записал на доске.

Вторая строка содержит одно целое число $$$b$$$ ($$$1 \le b \le 10^{18}$$$) — второе число, которое учитель записал на доске.

Третья строка содержит одно целое число $$$k$$$ ($$$0 \le k \le 10^{18}$$$) — максимальное количество действий, которое может выполнить Никита.

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

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

Вместо этого выведите два целых числа $$$c$$$ и $$$d$$$ — полученные числа, произведение которых максимально. Для выведенных чисел должно быть верно, что $$$c \ge a$$$, $$$d \ge b$$$ и $$$(c - a) + (d - b) \le k$$$.

В случае, если существует несколько оптимальных ответов, выведите любой из них.

Обратите внимание, что входные данные и ответ в этой задаче может превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).

Система оценки

Помимо тестов из условия, данная задача содержит 25 тестов, каждый из которых будет независимо оцениваться в 4 балла.

Примеры
Входные данные
5
9
0
Выходные данные
5 9
Входные данные
4
6
3
Выходные данные
7 6
Входные данные
5
5
2
Выходные данные
6 6
Примечание

В первом примере $$$k = 0$$$, поэтому Никита не может выполнить ни одного действия с данными числами. Таким образом, максимальное произведение чисел, записанных на доске, равно $$$5 \cdot 9 = 45$$$.

Во втором примере можно, например, три раза увеличить первое число на единицу. Можно показать, что полученное произведение $$$7 \cdot 6 = 42$$$ является максимальным.

В третьем примере можно один раз увеличить первое число на единицу и один раз увеличить второе число на единицу. Получится произведение $$$6 \cdot 6 = 36$$$.

2. Очередная задача про хорошие строки
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Одна известная команда впервые за несколько месяцев решила написать тренировку. Но друзья решили, что им чужды старые технологии, поэтому они попросили нейросеть сгенерировать задачу, а потом решить ее (ведь зачем решать задачи самим). Сама задача звучала довольно просто.

Вам даны $$$n$$$ строк $$$s_1, s_2, \ldots, s_n$$$, состоящих из цифр от $$$0$$$ до $$$9$$$. Необходимо посчитать количество пар индексов $$$(i, j)$$$ $$$1 \le i \lt j \le n$$$, таких что строка $$$s_i + s_j$$$ является хорошей, где $$$s_i + s_j$$$ — это конкатенация строк $$$s_i$$$ и $$$s_j$$$. Строка $$$t$$$ длины $$$m$$$ называется хорошей, если для любого индекса $$$1 \lt i \le m$$$ выполнено неравенство $$$t_{i - 1} \le t_i$$$.

Сгенерировать задачу нейросеть смогла, а вот решить ее — нет. Но друзья уже очень устали, поэтому решать эту задачу придется вам.

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

Первая строка содержит одно целое число $$$n$$$ ($$$1 \le n \le 100\,000$$$) — количество строк.

Каждая из следующих $$$n$$$ строк содержит строку $$$s_i$$$. Гарантируется, что строки $$$s_i$$$ состоят только из цифр от $$$0$$$ до $$$9$$$.

Гарантируется, что сумма длин строк не превосходит $$$100\,000$$$.

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

Выведите количество пар индексов $$$(i, j)$$$ $$$1 \le i \lt j \le n$$$, таких что строка $$$s_i + s_j$$$ является хорошей.

Обратите внимание, что ответ в этой задаче может превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).

Система оценки

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

Обозначим за $$$m$$$ сумму длин всех строк $$$s_i$$$. Иными словами, $$$m = \sum \limits_{i=1}^{n} \lvert s_i \rvert$$$.

ПодзадачаБаллы Дополнительные ограничения Необходимые подзадачи Информация о проверке
00Тесты из условияполная
115 $$$n, m \le 100$$$, $$$\lvert s_i \rvert \le 3$$$ для всех $$$1 \le i \le n$$$, все строки не содержат нулей первая ошибка
220$$$n, m \le 100$$$1первая ошибка
330$$$n \le 2\,000$$$1, 2первая ошибка
435нет1, 2, 3первая ошибка
Пример
Входные данные
4
456
01
1239
701
Выходные данные
1
Примечание

В примере подходит только одна пара индексов: $$$(2, 3)$$$. Полученная строка 011239 является хорошей.

3. Очередная задача про победу над монстрами
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Недавно Миша увлекся разработкой игр и уже выпустил свою первую игру в жанре RPG «Надземелья и Дарконы». Вы играете за рыцаря, который побеждает дарконов в надземельях. Все надземелья сгенерированы процедурно, драки с дарконами детально проработаны, а умопомрачительной 3D-графике позавидует даже «Суперпанк»!

Даня уже давно занимается прохождением игр на скорость, за что он и получил свою известность в сети Интернет. Миша обратился к Дане за помощью: он хочет, чтобы Даня во время прямой трансляции прошел игру «Надземелья и Дарконы» как можно быстрее, так как думает, что это привлечет новых игроков. Даня не смог отказаться от очередного испытания, однако быстрое прохождение требует глубоких знаний об игре, а времени на изучение у него нет, так что Миша вкратце объяснил, в чем заключается суть игры.

Ваш персонаж начинает свой путь с уровнем силы $$$x$$$. Он может пойти в любое из $$$n$$$ надземелий, пронумерованных целыми числами от $$$1$$$ до $$$n$$$, и попытаться победить там даркона, за счет чего повысить свой уровень. А именно, в надземелье с номером $$$i$$$ живет даркон с уровнем силы $$$a_i$$$, и его можно победить только в том случае, если уровень силы вашего персонажа больше уровня силы даркона. В противном случае вы гарантировано проиграете. После победы над дарконом уровень персонажа повысится на $$$a_i$$$, а само надземелье станет зачищенным, то есть там больше не будут появляться дарконы. Целью игры является победить самого большого и страшного даркона, живущего в надземелье под номером $$$n$$$, поэтому вы должны сражаться с дарконами, пока не получите достаточный уровень силы и не победите финального босса.

Зная все это, Дане осталось только выбрать стратегию прохождения, то есть какие надземелья и в каком порядке ему нужно зачищать, чтобы пройти игру. Естественно, ему в первую очередь важна скорость, так что стратегия должна быть выбрана таким образом, чтобы в каждом сражении Даня гарантировано выходил победителем, а сражений было как можно меньше.

Найдите оптимальную стратегию или скажите, что игру пройти невозможно.

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

Первая строка содержит два целых числа $$$n$$$ и $$$x$$$ ($$$1 \le n \le 100\,000$$$, $$$1 \le x \le 10^9$$$) — количество надземелий и изначальный уровень силы персонажа, соответственно.

Вторая строка содержит $$$n$$$ целых чисел $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \le a_i \le 10^9$$$), где $$$a_i$$$ — уровень силы даркона, живущего в надземелье с номером $$$i$$$.

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

Если игру пройти невозможно, выведите в единственной строке число $$$0$$$.

В противном случае в первой строке выведите целое число $$$m$$$ ($$$1 \le m \le n$$$) — количество зачищенных надземелий в оптимальной стратегии.

Во второй строке выведите $$$m$$$ различных целых чисел $$$b_1, \ldots, b_m$$$ ($$$1 \le b_i \le n$$$) — порядок, в котором Даня должен посещать надземелья в оптимальной стратегии. Обратите внимание, что последним надземельем должно быть надземелье с номером $$$n$$$, в которой обитает босс (иными словами, $$$b_m = n$$$).

В случае, если существует несколько оптимальных ответов, выведите любой из них.

Система оценки

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

ПодзадачаБаллы Дополнительные ограничения Необходимые подзадачи Информация о проверке
00Тесты из условияполная
16$$$n \le 8$$$первая ошибка
210$$$n \le 20$$$1первая ошибка
315 $$$x \le 200$$$ $$$a_i \le 200$$$ для всех $$$1 \le i \le n$$$ первая ошибка
469нет1, 2, 3первая ошибка
Примеры
Входные данные
10 2
4 1 5 6 8 3 2 7 9 10
Выходные данные
5
2 7 6 1 10
Входные данные
5 1
1 1 1 1 1
Выходные данные
0
Примечание

В первом примере оптимальная стратегия выглядит следующим образом.

  1. Победить даркона в надземелье с номером $$$2$$$, после этого сила героя будет равна $$$2 + 1 = 3$$$.
  2. Победить даркона в надземелье с номером $$$7$$$, после этого сила героя будет равна $$$3 + 2 = 5$$$.
  3. Победить даркона в надземелье с номером $$$6$$$, после этого сила героя будет равна $$$5 + 3 = 8$$$.
  4. Победить даркона в надземелье с номером $$$1$$$, после этого сила героя будет равна $$$8 + 4 = 12$$$.
  5. Наконец, победить босса в надземелье с номером $$$10$$$, так как его сила равна $$$10$$$, а сила героя равна $$$12$$$.

Во втором примере сила всех дарконов равна исходной силе героя, поэтому победить их невозможно.

4. Очередная задача про игру с камнями
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В результате неудачного стечения обстоятельств Миша оказался на необитаемом острове. Первым делом он, разумеется, выложил из камней большую надпись S.O.S. на пляже. Однако, до прибытия помощи ему нужно чем-то развлечься, поэтому он решил поиграть с оставшимся камнями.

Миша выложил все оставшиеся у него камни в $$$n$$$ кучек таким образом, что в $$$i$$$-й кучке оказалось ровно $$$r_i$$$ камней. После этого мальчик решил взять из каждой кучки некоторое количество камней, чтобы были выполнены следующие условия:

  • Из $$$i$$$-й кучки Миша должен взять не менее, чем $$$l_i$$$ и не более, чем $$$r_i$$$ камней;
  • Суммарное количество взятых камней должно быть равно $$$s$$$.

После того, как Миша справился с данным заданием он задумался, сколькими способами он может взять камни из кучек таким образом, чтобы описанные условия были выполнены. А именно, для каждой кучки $$$i$$$ он хочет вычислить, сколькими способами он может выбрать некоторое количество камней из $$$i$$$-й кучки, чтобы из остальных кучек можно было выбрать некоторое количество камней, выполнив описанные условия.

К сожалению или к счастью, помощь прибыла слишком быстро, и Миша не успел найти ответ на свой вопрос. Поэтому сделать это предстоит вам.

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

Первая строка содержит два целых числа $$$n$$$ и $$$s$$$ ($$$1 \le n \le 100\,000$$$, $$$0 \le s \le 10^{18}$$$) — количество кучек с камнями, а также суммарное количество камней, взятых из кучек.

Каждая из следующих $$$n$$$ строк содержит два целых числа $$$l_i$$$ и $$$r_i$$$ ($$$0 \le l_i \le r_i \le 10^9$$$) — минимальное и максимальное количество камней, которые Миша может взять из $$$i$$$-й кучки.

Обратите внимание, что входные данные в этой задаче могут превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).

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

Выведите $$$n$$$ целых чисел $$$c_1, c_2, \ldots, c_n$$$, обозначающих количество способов выбрать некоторое количество камней из $$$i$$$-й кучки, чтобы существовала возможность взять некоторое количество камней из остальных кучек, чтобы выполнить поставленные условия.

Система оценки

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

Обозначим за $$$m$$$ максимальную разность между $$$r_i$$$ и $$$l_i$$$. Иными словами, $$$m = \max \limits_{i=1}^{n} (r_i - l_i)$$$.

ПодзадачаБаллы Дополнительные ограничения Необходимые подзадачи Информация о проверке
00Тесты из условияполная
110$$$n, m \le 7$$$первая ошибка
215$$$n, m \le 1\,000$$$1первая ошибка
320$$$n \le 1\,000$$$1, 2первая ошибка
425$$$n \cdot m \le 10^7$$$1, 2первая ошибка
530нет1, 2, 3, 4первая ошибка
Пример
Входные данные
5 10
1 3
2 3
3 3
0 10
1 1
Выходные данные
3 2 1 4 1 
Примечание

Рассмотрим пример из условия.

Из первой кучки можно выбрать $$$1$$$, $$$2$$$ или $$$3$$$ камня. Для каждого из этих способов из остальных кучек можно выбрать некоторое количество камней таким образом, чтобы суммарно было выбрано $$$10$$$ камней. Например, можно сделать это следующими способами: $$$1 + 2 + 3 + 3 + 1 = 10$$$, $$$2 + 2 + 3 + 2 + 1 = 10$$$, $$$3 + 2 + 3 + 1 + 1 = 10$$$.

Из второй кучки можно выбрать $$$2$$$ или $$$3$$$ камня, например, следующими способами: $$$1 + 2 + 3 + 3 + 1 = 10$$$, $$$1 + 3 + 3 + 2 + 1 = 10$$$.

Из третьей кучки можно выбрать $$$3$$$ камня. Других способов нет, так как $$$l_3 = r_3 = 3$$$.

Из четвертой кучки можно выбрать $$$0$$$, $$$1$$$, $$$2$$$ или $$$3$$$ камня. Способы для выбора $$$1$$$, $$$2$$$ или $$$3$$$ камней уже описаны выше. Способ для $$$0$$$ камней выглядит следующим образом: $$$3 + 3 + 3 + 0 + 1 = 10$$$.

Из третьей кучки можно выбрать $$$1$$$ камень. Других способов нет, так как $$$l_5 = r_5 = 1$$$.

5. Очередная задача про кузнечика
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В ряд стоят $$$n$$$ столбиков, пронумерованных слева направо целыми числами от $$$1$$$ до $$$n$$$. Высота $$$i$$$-го столбика равна $$$a_i$$$. Кузнечик может прыгать по столбикам только вперед (со столбика с меньшим номером на столбик с большим номером), и за один прыжок он может перепрыгнуть не более, чем на $$$k$$$ столбиков вперед. Формально, кузнечик может перепрыгнуть со столбика $$$i$$$ на столбик $$$j$$$, если $$$i \lt j$$$ и $$$j - i \le k$$$.

Кузнечик хочет быть как можно выше, поэтому он стремится максимизировать минимальную из высот посещенных им столбиков.

Обозначим за $$$f(l, r)$$$ максимум из минимальных высот посещенных столбиков по всем маршрутам кузнечика от столбика с номером $$$l$$$ до столбика с номером $$$r$$$.

Вам требуется найти значение суммы $$$\sum \limits_{l=1}^n \sum \limits_{r=l}^n f(l, r)$$$. Иными словами вы должны найти сумму значений $$$f(l, r)$$$ по всем парам столбиков $$$l$$$ и $$$r$$$ ($$$l \le r$$$).

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

Первая строка содержит два целых числа $$$n$$$ и $$$k$$$ ($$$2 \le n \le 200\,000, 1 \le k \le n - 1$$$) — количество столбиков и максимальное расстояние, на которое кузнечик может прыгнуть вперед.

Вторая строка содержит $$$n$$$ целых чисел $$$a_i$$$ ($$$1 \le a_i \le 10^8$$$) — высоты столбиков.

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

Выведите одно целое число — значение суммы $$$\sum \limits_{l=1}^n \sum \limits_{r=l}^n f(l, r)$$$.

Обратите внимание, что ответ в этой задаче может превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).

Система оценки

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

ПодзадачаБаллы Дополнительные ограничения Необходимые подзадачи Информация о проверке
00Тесты из условияполная
15$$$n \le 5$$$первая ошибка
25$$$n \le 15$$$1первая ошибка
310$$$n \le 100$$$1, 2первая ошибка
410$$$n \le 600$$$1, 2, 3первая ошибка
510$$$n \le 5\,000, k = 1$$$первая ошибка
615$$$n \le 5\,000$$$1, 2, 3, 4первая ошибка
715$$$k = 1$$$5первая ошибка
830нет1 – 7первая ошибка
Пример
Входные данные
4 2
2 1 4 2
Выходные данные
18
Примечание

Рассмотрим пример из условия.

  • Для пары столбиков $$$[1, 1]$$$ оптимальный маршрут состоит только из первого столбика, следовательно $$$f(1, 1) = 2$$$
  • Для пары столбиков $$$[1, 2]$$$ оптимальный маршрут состоит из столбиков с номерами $$$1$$$ и $$$2$$$, следовательно $$$f(1, 2) = 1$$$
  • Для пары столбиков $$$[1, 3]$$$ оптимальный маршрут состоит из столбиков с номерами $$$1$$$ и $$$3$$$, следовательно $$$f(1, 3) = 2$$$
  • Для пары столбиков $$$[1, 4]$$$ оптимальный маршрут состоит из столбиков с номерами $$$1$$$, $$$3$$$ и $$$4$$$, следовательно $$$f(1, 4) = 2$$$
  • Для пары столбиков $$$[2, 2]$$$ оптимальный маршрут состоит только из второго столбика, следовательно $$$f(2, 2) = 1$$$
  • Для пары столбиков $$$[2, 3]$$$ оптимальный маршрут состоит из столбиков с номерами $$$2$$$ и $$$3$$$, следовательно $$$f(2, 3) = 1$$$
  • Для пары столбиков $$$[2, 4]$$$ оптимальный маршрут состоит из столбиков с номерами $$$2$$$ и $$$4$$$, следовательно $$$f(2, 4) = 1$$$
  • Для пары столбиков $$$[3, 3]$$$ оптимальный маршрут состоит только из третьего столбика, следовательно $$$f(3, 3) = 4$$$
  • Для пары столбиков $$$[3, 4]$$$ оптимальный маршрут состоит из столбиков с номерами $$$3$$$ и $$$4$$$, следовательно $$$f(3, 4) = 2$$$
  • Для пары столбиков $$$[4, 4]$$$ оптимальный маршрут состоит только из четвертого столбика, следовательно $$$f(4, 4) = 2$$$.