Алгоритмы(1657 задач)
Структуры данных(279 задач)
Интерактивные задачи(17 задач)
Другое(54 задач)
Популярная сеть быстрого питания «McDuck's» открыла новый филиал в Берляндии. В ресторане установлено \(k\) плит. Для того чтобы приготовить бургер, надо жарить котлету в течение минуты на одной из плит, поэтому ресторан может готовить не более \(k\) бургеров в минуту.
Известно, что в «McDuck's» придут \(n\) клиентов. \(i\)-й из них придёт в момент времени \(t_i\), закажет \(x_i\) бургеров и будет готов заплатить за них \(c_i\) бурлей. Каждый клиент готов ждать заказ в течение \(w\) минут и, если через \(w\) минут после прихода он не получил \(x_i\) бургеров, он не заплатит ничего. При этом каждый клиент готов получать только свежие бургеры, то есть только те, котлеты для которых были поджарены не раньше времени \(t_i\). Из-за таких сложных требований ресторан не всегда сможет выполнить все заказы всех клиентов.
Менеджеров ресторана заинтересовало, какую максимальную прибыль может получить «McDuck's». Помогите им ответить на этот непростой вопрос. Можно считать, что на готовку бургеров не расходуется никаких денег.
В первой строке содержатся три целых числа \(n\), \(k\) и \(w\) (\(1 \le n \le 100\,000\), \(1 \le k \le 10\), \(1 \le w \le 60\)) — число клиентов, число плит и время ожидания клиента, соответственно.
Следующие \(n\) строк содержат описания клиентов, состоящие из трёх целых чисел — \(t_i\), \(x_i\), \(c_i\) (\(1 \le t_i, x_i, c_i \le 10^9\)) — время (в минутах) прихода \(i\)-го клиента, число бургеров, которые он закажет и число бурлей, которые он готов заплатить, соответственно. Клиенты перечислены в порядке возрастания времени прихода, то есть для любого \(i \ge 2\) верно, что \(t_{i - 1} \le t_i\).
В единственной строке выведите одно число — максимальную прибыль ресторана.
В первом тестовом примере первую котлету можно поставить жариться в момент времени 0 и тогда в момент времени 1 она будет готова и её можно будет дать в бургере первому клиенту. В момент времени 1 можно поставить жариться ещё одну котлету, она будет готова в момент времени 2 и её можно будет дать в бургере второму клиенту.
2 1 1 1 1 5 1 1 7
12
3 2 2 1 6 8 2 5 10 3 4 4
12
На детском празднике дети водили хороводы. Как только музыка закончила играть, дети всё ещё стояли в кругу. Тут Лена вспомнила, что родители дали ей коробку с \(k\) конфетками «Wilky May». Лена не жадина, поэтому она решила раздать все свои конфетки друзьям из хоровода. Лена знает, что некоторые её друзья сладкоежки, а некоторые нет. Сладкоежки берут из коробки две конфетки, если в коробке есть хотя бы две конфетки, а иначе берут одну. Остальные друзья Лены всегда берут ровно одну конфетку из коробки.
Чтобы начать раздавать конфетки, Лена вышла из хоровода, после чего в хороводе остались \(n\) ее друзей. Чтобы раздавать конфетки было проще, Лена присвоила каждому другу в хороводе номер в порядке по часовой стрелке, начиная с её лучшего друга Ромы, который получил номер \(1\).
Лена дала коробку другу, который получил номер \(l\), после чего каждый друг Лены, начиная с друга с номером \(l\), брал конфетки из коробки и передавал коробку следующему в порядке по часовой стрелке другу. После того, как друг с номером \(r\) взял конфетки, в коробке конфеток не осталось. Обратите внимание, что возможно, что некоторые друзья Лены брали конфетки из коробки несколько раз, то есть коробка могла пройти несколько полных кругов по хороводу.
Лена не знает, кто из ее друзей сладкоежки, но ее интересует, сколько максимум из её друзей могут быть сладкоежками. Если же такой ситуации не могло случиться, и Лена ошиблась в своих наблюдениях, сообщите ей об этом.
В единственной строке задаются четыре целых числа \(n\), \(l\), \(r\), \(k\) (\(1 \le n, k \le 100\), \(1 \le l, r \le n\)) — количество детей в хороводе, номер друга, которому Лена отдала коробку конфет, номер друга, который взял последнюю конфетку и количество конфет в коробке, соответственно.
Выведите одно целое число — максимально возможное количество сладкоежек среди друзей Лены или « -1 » (без кавычек), если Лена ошиблась в своих наблюдениях.
В первом примере любые два друга могут быть сладкоежками, тогда каждый два раза получит коробку конфет и последним, кто возьмёт конфету будет четвёртый человек.
Во втором примере сладкоежками могут быть любые три друга, кроме друга, стоящего на третьем месте.
В третьем примере только один друг возьмёт одну конфетку, но он может быть сладкоежкой, просто он не может взять две конфеты. Все остальные в кругу тоже могут быть сладкоежками, но они не могут взять ни одной конфеты.
В четвёртом примере Лена ошиблась и такой ситуации быть не могло.
4 1 4 12
2
5 3 4 10
3
10 5 5 1
10
5 4 5 6
-1
Это интерактивная задача.
В выходной Алексей вместе со своими одноклассниками решил посетить парк аттракционов. Поскольку Алексею очень нравится решать головоломки и получать за это призы, его заинтересовал новый павильон «Угадай-ка!», где посетителям предлагается сыграть в следующую игру.
На столе в павильоне есть клетчатое прямоугольное поле размера \(n \times m\), каждая клетка раскрашена в один из \(k\) разных цветов, и есть колода из \(n \cdot m\) карт с написанными на них числами от 1 до \(n \cdot m\). Ведущий игры в павильоне загадывает одну из карт колоды, а посетитель должен её отгадать. Чтобы отгадать неизвестную ему карту, посетитель задаёт ведущему один или несколько запросов следующим образом:
Всего посетителю разрешено разложить карты и получить ответ ведущего не более \(99\) раз, после чего он должен правильно назвать номер загаданной карты. Гарантируется, что ответы ведущего не противоречивы, то есть всегда существует по крайней мере одна карта, для которой все данные ведущим ответы верны.
Напишите программу, которая поможет Алексею получить приз!
Ваша программа будет общаться с тестирующей системой по протоколу, описанному ниже.
При запуске решения на вход подаются три целых положительных числа \(n\), \(m\) и \(k\) (\(1 \leq n, m \leq 10\), \(2 \leq k \leq n \cdot m\)) — размеры игрового поля и количество цветов, в которые раскрашено поле. В каждой из следующих \(n\) строк передаётся по \(m\) целых чисел через пробел, каждое от \(1\) до \(k\) — раскраска клеток игрового поля. Гарантируется, что для каждого из \(k\) цветов на поле есть по крайней мере одна клетка, раскрашенная в этот цвет.
Вам разрешается задать ведущему не более \(99\) запросов , чтобы угадать загаданную ведущим карту.
Чтобы задать запрос, выведите строку « ? », после чего выведите \(n\) строк по \(m\) целых чисел в каждой — номера карт, раскладываемых вами в соответствующие клетки поля. Каждое число должно быть от 1 до \(n \cdot m\), номера карт не должны повторяться.
В ответ на каждый запрос вводится целое число \(c\) — цвет клетки, в которую вы положили загаданную карту, или число \(-1\) в случае, если программа превысила ограничение по числу запросов. Обратите внимание, в случае считывания числа \(-1\) вы обязательно должны сразу завершить вашу программу. В противном случае, вердикт тестирующей системы может быть некорректным!
Как только вы найдете ответ, выведите строку « Ready! ». В следующей строке выведите целое число \(x\) (\(1 \leq x \leq n \cdot m\)) — номер загаданной ведущим карты. После этого ваша программа должна завершиться.
Для установки правильности вашей программы жюри может запускать её произвольное количество раз для одного и того же игрового поля с разными загаданными картами.
В условии в примере взаимодействия вводимые и выводимые данные расположены для удобства восприятия в хронологическом порядке, при реальном взаимодействии никакие «лишние» переводы строк возникать не должны.
В примере поле 2 на 3 раскрашено в 3 цвета. Ответ на первый запрос — цвет 1, следовательно, ведущий загадал карту c номером \(1\) или с номером \(3\). Ответ на второй запрос — цвет 2, это говорит о том, что ведущий загадал карту с номером \(3\) или \(4\). Следовательно, была загадана карта с номером 3. Обратите внимание, что при проверке вашей программы на этом тесте в тестирующей системе может быть загадана другая карта.
В точности соблюдайте формат выходных данных. После каждого вывода обязательно выводите один перевод строки и сбрасывайте буфер вывода — для этого используйте flush(output) на языке Паскаль или Delphi, fflush(stdout) или cout.flush() в C/C++, sys.stdout.flush() на языке Python, System.out.flush() на языке Java.
2 3 3 1 2 1 2 3 3 1 2
? 1 2 3 4 5 6 ? 2 4 6 3 1 5 Ready! 3
Индра — большой любитель математики. Читая книгу по теории игр, он наткнулся на интересную функцию \(mex\). Она определяется следующим образом: \(mex(A)\) — это минимальное положительное целое число, которое отсутствует в множестве \(A\). Например, \(mex\) множества \(\{1, 2, 3, 5, 100\}\) равен \(4\), а \(mex\) множества \(\{2, 3, 4, 5\}\) равен \(1\).
Чтобы поупражняться с применением функции \(mex\), Индра взял множество чисел \(A\), состоящее из \(n\) целых положительных чисел, и положительное число \(k\). Затем Индра \(k\) раз произвёл следующую операцию: он добавил в множество \(A\) ещё одно число, равное \(mex(A)\), тем самым, каждый раз увеличивая размер множества \(A\) на один.
По заданному множеству \(A\) и числу \(k\) определите последнее число, которое Индра добавит в множество.
В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \leq n \leq 100\,000\), \(1 \leq k \leq 10^9\)) — количество чисел в множестве и количество операций добавления числа, произведённых Индрой.
Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 100\,000\)) — элементы множества \(A\).
Выведите одно целое число — последнее число, которое Индра добавит в множество.
В первом примере \(mex\) множества \(\{1, 2, 4, 5\}\) равен \(3\), после добавления \(mex\) в множество, оно станет равным \(\{1, 2, 3, 4, 5\}\).
4 1 4 2 1 5
3
7 10 1 3 20 2 7 45 5
15
Жюри Московской Олимпиады Школьников по программированию уже много лет проводит олимпиады. За это время у них накопилось огромное количество дипломов. С котятами, с видами на Воробьёвы Горы, с основными достопримечательностями города-героя Москвы и многими другими рисунками на фоне.
На носу была Московская Командная Олимпиада Школьников, на которой будет раздаваться очередной набор дипломов. Последняя проблема, которую всё никак не удавалось решить — кто же будет изображён на дипломах в этом году. Кандидатов было много, но в конце концов остались только Пегас Артур и Единорог Олег. Так как всему составу жюри собраться в одно время в одном месте довольно сложно, было решено провести электронное голосование.
Процесс голосования проходит следующим образом: каждый из членов жюри в течение дня голосования отправляет письмо на почтовый ящик с единственным словом: " PEGAS " или " UNICORN ". Дальше специально обученный бот открывает каждое письмо, считывает кодовое слово и заносит в базу голосования. Более того он поддерживает результаты голосования в онлайн режиме и выкладывает на всем небезызвестный сайт.
И вот пришёл День выборов нового символа для диплома. Ровно в полдень результаты голосования складывались таким образом, что Единорог Олег выигрывал с отрывом в \(a\%\) голосов от Пегаса Артура. Притом известно, что проголосовало только \(p\%\) членов жюри. Пегасу Артуру стало интересно, есть ли у него еще шансы на победу. Вам известно, что победитель считается абсолютным только в том случае, если отрыв от соперника составляет хотя бы один процент голосов. Иначе победителем становится Единорог Олег, так как у него красивые глаза. В случае, если у Пегаса еще есть шансы на абсолютную победу, его интересует, какой минимальный целый процент голосов среди ещё не проголосовавших членов жюри он для этого должен набрать.
В первой строке заданы два целых числа \(a\) и \(p\). (\(0 \leq a \leq 100, 1 \leq p \leq 100\)) — текущий отрыв (в процентах голосов) Единорога Олега от Пегаса Артура и процент членов жюри, которые уже проголосовали, соответственно.
Выведите одно целое число — минимальное целое количество процентов от оставшегося количества голосов, достаточное для того, чтобы Пегас Артур стал абсолютным победителем. Если у Пегаса нет шансов на абсолютную победу, выведите « Impossible » (без кавычек).
В первом примере у Артура \(18.5\%\) поддержки от проголосовавшего в данный момент числа членов жюри, а у Олега \(81.5\%\). Чтобы победить, Артуру надо набрать как минимум \(65\%\) поддержки среди непроголосовавших, чтобы стать абсолютным победителем. В этом случае за Единорога Олега проголосует \(49.415\%\), а за Артура \(50.585\%\). Если же Артур наберет \(64\%\), то у него будет \(49.895\%\), а у Олега \(50.105\%\).
Во втором примере уже все голоса посчитаны, а мнения голосовавших разделились поровну, поэтому победит Единорог Олег.
63 31
65
0 100
Impossible