Никита известен тем, что он отлично знает школьную программу по математике и умеет решать линейные уравнения любого уровня сложности. Для того, чтобы заинтересовать юного математика, учитель написал на доске два целых числа $$$a$$$ и $$$b$$$ и дал школьнику следующую задачу.
Учитель разрешил Никите не более, чем $$$k$$$ раз выполнить одно из следующих действий:
Задача Никиты — выполнить разрешенные действия таким образом, чтобы максимизировать произведение двух полученных чисел. К сожалению, решить данную задачу самостоятельно школьнику не удалось, поэтому вам придется ему помочь.
Первая строка содержит одно целое число $$$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 балла.
590
5 9
463
7 6
552
6 6
В первом примере $$$k = 0$$$, поэтому Никита не может выполнить ни одного действия с данными числами. Таким образом, максимальное произведение чисел, записанных на доске, равно $$$5 \cdot 9 = 45$$$.
Во втором примере можно, например, три раза увеличить первое число на единицу. Можно показать, что полученное произведение $$$7 \cdot 6 = 42$$$ является максимальным.
В третьем примере можно один раз увеличить первое число на единицу и один раз увеличить второе число на единицу. Получится произведение $$$6 \cdot 6 = 36$$$.
Одна известная команда впервые за несколько месяцев решила написать тренировку. Но друзья решили, что им чужды старые технологии, поэтому они попросили нейросеть сгенерировать задачу, а потом решить ее (ведь зачем решать задачи самим). Сама задача звучала довольно просто.
Вам даны $$$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$$$.
| Подзадача | Баллы | Дополнительные ограничения | Необходимые подзадачи | Информация о проверке |
| 0 | 0 | Тесты из условия | полная | |
| 1 | 15 | $$$n, m \le 100$$$, $$$\lvert s_i \rvert \le 3$$$ для всех $$$1 \le i \le n$$$, все строки не содержат нулей | первая ошибка | |
| 2 | 20 | $$$n, m \le 100$$$ | 1 | первая ошибка |
| 3 | 30 | $$$n \le 2\,000$$$ | 1, 2 | первая ошибка |
| 4 | 35 | нет | 1, 2, 3 | первая ошибка |
4456011239701
1
В примере подходит только одна пара индексов: $$$(2, 3)$$$. Полученная строка 011239 является хорошей.
Недавно Миша увлекся разработкой игр и уже выпустил свою первую игру в жанре 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$$$).
В случае, если существует несколько оптимальных ответов, выведите любой из них.
Баллы за каждую подзадачу начисляются только в случае, если все тесты для этой подзадачи и необходимых подзадач успешно пройдены.
| Подзадача | Баллы | Дополнительные ограничения | Необходимые подзадачи | Информация о проверке |
| 0 | 0 | Тесты из условия | полная | |
| 1 | 6 | $$$n \le 8$$$ | первая ошибка | |
| 2 | 10 | $$$n \le 20$$$ | 1 | первая ошибка |
| 3 | 15 | $$$x \le 200$$$ $$$a_i \le 200$$$ для всех $$$1 \le i \le n$$$ | первая ошибка | |
| 4 | 69 | нет | 1, 2, 3 | первая ошибка |
10 24 1 5 6 8 3 2 7 9 10
5 2 7 6 1 10
5 11 1 1 1 1
0
В первом примере оптимальная стратегия выглядит следующим образом.
Во втором примере сила всех дарконов равна исходной силе героя, поэтому победить их невозможно.
В результате неудачного стечения обстоятельств Миша оказался на необитаемом острове. Первым делом он, разумеется, выложил из камней большую надпись S.O.S. на пляже. Однако, до прибытия помощи ему нужно чем-то развлечься, поэтому он решил поиграть с оставшимся камнями.
Миша выложил все оставшиеся у него камни в $$$n$$$ кучек таким образом, что в $$$i$$$-й кучке оказалось ровно $$$r_i$$$ камней. После этого мальчик решил взять из каждой кучки некоторое количество камней, чтобы были выполнены следующие условия:
После того, как Миша справился с данным заданием он задумался, сколькими способами он может взять камни из кучек таким образом, чтобы описанные условия были выполнены. А именно, для каждой кучки $$$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)$$$.
| Подзадача | Баллы | Дополнительные ограничения | Необходимые подзадачи | Информация о проверке |
| 0 | 0 | Тесты из условия | полная | |
| 1 | 10 | $$$n, m \le 7$$$ | первая ошибка | |
| 2 | 15 | $$$n, m \le 1\,000$$$ | 1 | первая ошибка |
| 3 | 20 | $$$n \le 1\,000$$$ | 1, 2 | первая ошибка |
| 4 | 25 | $$$n \cdot m \le 10^7$$$ | 1, 2 | первая ошибка |
| 5 | 30 | нет | 1, 2, 3, 4 | первая ошибка |
5 101 32 33 30 101 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$$$.
В ряд стоят $$$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#).
Баллы за каждую подзадачу начисляются только в случае, если все тесты для этой подзадачи и необходимых подзадач успешно пройдены.
| Подзадача | Баллы | Дополнительные ограничения | Необходимые подзадачи | Информация о проверке |
| 0 | 0 | Тесты из условия | полная | |
| 1 | 5 | $$$n \le 5$$$ | первая ошибка | |
| 2 | 5 | $$$n \le 15$$$ | 1 | первая ошибка |
| 3 | 10 | $$$n \le 100$$$ | 1, 2 | первая ошибка |
| 4 | 10 | $$$n \le 600$$$ | 1, 2, 3 | первая ошибка |
| 5 | 10 | $$$n \le 5\,000, k = 1$$$ | первая ошибка | |
| 6 | 15 | $$$n \le 5\,000$$$ | 1, 2, 3, 4 | первая ошибка |
| 7 | 15 | $$$k = 1$$$ | 5 | первая ошибка |
| 8 | 30 | нет | 1 – 7 | первая ошибка |
4 22 1 4 2
18
Рассмотрим пример из условия.