Турнир Архимеда(52 задач)
Кировские командные турниры(8 задач)
Барнаульские командные турниры(10 задач)
Московская командная олимпиада(246 задач)
Командные чемпионаты школьников Санкт-Петербурга по программированию(167 задач)
ВКОШП(180 задач)
У Даши тоже скоро день рождения. Целыми днями она обдумывает, кого бы ей пригласить, какое платье надеть, и пытается угадать, что же ей подарят. А в это время её старший брат Серёжа занят гораздо более печальными мыслями — мама сказала, что именно он будет развлекать детей после застолья.
Подойдя к этому делу со свойственной ему ответственностью, Серёжа разработал игру, призванную повысить навыки детей в работе со строками. Правила этой игры таковы:
Маме эта игра показалась очень забавной, но она сразу заметила два слабых места в плане Серёжи. Во-первых, может случится так, что игра никогда не закончится. Во-вторых, дети носятся очень быстро, и уследить за словами у них на лбах практически невозможно, поэтому ведущий (то есть сам Серёжа) может не заметить победителя. Для того, чтобы избежать подобных неприятностей, Серёжа попросил Вас, как своего друга-программиста, написать программу, предсказывающую исход игры по начальным данным.
В первой строке входного файла содержатся два целых числа N и K ( 1 ≤ N ≤ 10 3 , 0 ≤ K ≤ N ). Следующая строка входного файла содержит строку из N строчных латинских букв: первая буква соответствует буквам, лежащим на подносе перед первым игроком, вторая — перед вторым игроком и так далее.
Если игра с имеющимися начальными данными когда-нибудь закончится, то выведите в первой строке слово «Finite» (без кавычек), а во второй строке — номер победителя. В случае, если ребята обречены бегать бесконечно долго, выведите в первой строке слово «Infinite» (без кавычек), а во второй строке выведите в возрастающем порядке номера игроков, которые на момент наступления Апокалипсиса будут иметь минимальные в алфавитном порядке строки на своих лбах.
6 2 cabcba
Finite 6
4 2 abaa
Infinite 1 3
5 0 ababa
Infinite 1 3 5
Скоро у Лизы день рождения! Родители долго думали, чем порадовать свою любимую дочку, и решили, что лучше всего подарить ей путешествие в Нью-Йорк. Ведь это — такой оригинальный подарок! Так как Лиза — уже самостоятельная девочка, она вполне может сама выбрать, где ей поселиться в Нью-Йорке. Однако родители очень беспокоятся за нее, поэтому они разрешили ей выбирать только из H безопасных пятизвездочных отелей.
Лиза — общительная девочка, и у неё очень много друзей. Узнав, что она будет отмечать день рождения в Нью-Йорке, друзья немедленно отправились туда и поселились в C хостелах.
Лиза по случаю дня рождения устраивает маленькую вечеринку. К сожалению, никто из её друзей не хочет пропустить очередную серию нового реалити-шоу «Home-2», но как только серия закончится, все они одновременно выйдут из своих хостелов и поедут поздравлять Лизу. Она — девочка нетерпеливая, поэтому хочет выбрать отель так, чтобы последний друг приехал к ней как можно раньше, т.е. находился как можно ближе. Так как она тоже не хочет отвлекаться от просмотра высокоинтеллектуального шоу, она попросила вас помочь ей с выбором отеля. Конечно, за это она тоже пригласит вас на вечеринку!
Как известно, Нью-Йорк представляет собой идеальную прямоугольную сетку улиц: с севера на юг тянутся N авеню, а с запада на восток — M улиц. Наличием Бродвея мы в этой задаче пренебрежем. Можно считать, что каждый объект находится в узле этой сетки (и, таким образом, однозначно задается номером авеню и номером улицы, возле пересечения которых он расположен), а два соседних узла сетки находятся на расстоянии одного километра.
В первой строке входных данных содержится два числа N и M — размеры города ( 1 ≤ N , M ≤ 1000 ). В следующей строке содержится единственное число C — количество хостелов ( 1 ≤ C ≤ 1000 ). Далее в C строках содержатся описания хостелов, каждый из них задается двумя координатами x и y ( 1 ≤ x ≤ N , 1 ≤ y ≤ M ). В следующей строке содержится одно число H — количество безопасных отелей ( 1 ≤ H ≤ 1000 ). В следующих строках содержатся описания отелей, в том же формате, что и хостелы.
Отель и хостел могут располагаться возле одного и того же перекрестка.
В первой строке выходных данных выведите одно число — искомое оптимальное расстояние. В следующей строке выведите номер любого из отелей, гарантирующих данное расстояние.
10 10 2 1 1 3 3 2 1 10 4 4
6 2
Как-то раз удав, слонёнок, мартышка и попугай играли в замечательную игру <<змейка>>.
Суть этой известной игры в следующем. Удав перемещается по прямоугольному полю, не переползая через самого себя, и ест яблоки, которые ему сверху скидывает попугай.
Как известно, измерять длину удава можно в слонятах, мартышках или попугаях. Но в попугаях удав выходит гора-а-а-здо длиннее, поэтому мы остановимся на них в качестве единицы измерения. Поле представляет собой прямоугольную сетку из \)10\( строк по \)10\( ячеек размером \)1\( попугай \)\times\( \)1\( попугай. Изначально длина удава составляет всего три попугая (каким образом удав становится таким коротким в начале игры - долгая и запутанная история, поэтому мы не будем на ней останавливаться в рамках этой задачи), он занимает три крайних левых ячейки в верхней строке поля и смотрит направо. Каждый раз, съедая яблоко, удав удлиняется на одного попугая и занимает, таким образом, ещё одну клетку поля.
Более формально, удав длины \)L\( попугаев представляет собой последовательность из \)L\( различных клеток поля \)A_1, A_2, \ldots, A_L\( таких, что любые две соседние в этой последовательности клетки \)A_i\( и \)A_{i+1}\( являются соседними на поле, т.е. имеют общую сторону. Головой удава считается клетка \)A_L\(. За один ход удав может продвинуться на одну клетку: он выбирает новую клетку \)H\( для своей головы (естественно, смежную с текущей клеткой головы \)A_L\( и не выходящую за границы поля), а его хвост подтягивается следом на одну клетку. То есть, после хода удав будет представлять собой последовательность из клеток \)A_2, A_3, \ldots, A_L, H\(. Обратите внимание, по определению выше удав после выполнения хода не должен дважды содержать одну и ту же клетку, но новое положение головы \)H\( вполне может совпадать со старым положением хвоста \)A_1\( (наш удав перемещается подобно гусенице, сначала сжимаясь и подтягивая хвост, а потом разжимаясь и продвигая голову, поэтому это корректный ход).
Заметим, что из этого определения сразу следует, что в каждый момент времени у удава есть возможность пойти в не более чем трёх направлениях - продолжить движение в направлении, куда смотрит его голова, свернуть налево или свернуть направо.
Перед каждым ходом удава на поле находится ровно одно яблоко. Каждый раз, когда удав съедает яблоко, его длина увеличивается на одного попугая. Это происходит следующим образом: удав делает ход, и если после этого в какой-нибудь из клеток удава (т.е. из клеток \)A_2, A_3, \ldots, A_L, H\( в обозначениях выше) оказывается яблоко, оно считается съеденным (как именно удав может есть яблоки любой частью своего тела - не менее запутанная история, чем объяснение таким скромным размерам удава в начале игры, поэтому её мы также опустим). Если яблоко было съедено, то оно продвигается по телу удава вплоть до бывшего положения хвоста (т.е. до клетки \)A_1\(), и на этом месте возникает новая клетка удава. Таким образом, удав приобретает длину в \)(L + 1)\( попугай и занимает к началу следующего хода клетки (\)A_1, A_2, \ldots A_K, H\(). В этот же момент попугай скидывает следующее яблоко на поле. Обратите внимание, что если удав ест яблоко, то в этом случае он уже не имеет права выбирать в качестве нового положения головы \)H\( старую клетку своего хвоста, потому что тогда к началу следующего хода она будет дважды встречаться в теле удава, что недопустимо!
Удав проигрывает, если он делает некорректный ход. Некто (не будем говорить, кто, хотя это был слонёнок) рассказал вам, в какие клетки поля и в каком порядке попугай собирается скидывать яблоки. Помогите удаву построить выигрышную стратегию перемещения!
В первой строке ввода записано натуральное число \)K\( - количество яблок, которое скинет попугай на поле. Длина удава не превзойдёт \)38\( попугаев, т.е. \)K + 3 \le 38\(.
В каждой из последующих \)K\( строк задано по два целых числа \)R_i, C_i\( (\)1 \le R_i, C_i \le 10\()- номера строки и столбца, куда попугай скинет \)i\(-е яблоко. Строки нумеруются с \)1\( по \)10\( сверху вниз, столбцы нумеруются с \)1\( по \)10\( слева направо. Позиции, где возникают яблоки, могут повторяться.
Сначала выведите целое число \)T\( - количество ходов, которое потребуется удаву, чтобы съесть все яблоки.
Во второй строке выведите строку, задающую последовательность ходов удава, состоящую из \)T\( латинских букв 'R', 'U', 'L', 'D', обозначающих, что на очередном ходу клетка головы удава смещается соответственно вверх, вправо, влево или вниз.
Будет зачтена любая последовательность ходов, которая не приводит к проигрышу удава, по итогам которой все яблоки будут съедены, и длина \)T\( которой не превосходит \)10\,000\( в целях экономии времени играющих. Жюри гарантирует, что при данных ограничениях задачу всегда возможно решить.
Пояснение к первому тесту. Положение удава по ходу игры показано ниже.
Пояснение ко второму тесту. Второе яблоко выпадает прямо на удава, и сразу оказывается съеденным, т.е. перед вторым ходом удав состоит из клеток \)(1, 1), (1, 2), (1, 3), (2, 3)\(, а после второго хода - из клеток \)(1, 1), (1, 2), (1, 3), (2, 3), (3, 3)\(. Также обратите внимание, что после шестого хода происходит ситуация, проиллюстрированная в условии: в качестве нового положения головы выбирается клетка \)(2, 3)$, являющаяся на тот момент клеткой хвоста.
3 3 3 4 6 1 3
16 DDDRRRUUULLLLDRD
4 2 3 1 2 3 5 2 2
8 DDRRULLL
В одном далеком мире, в славном городе Эрбовле открыли новый банк. В банке есть \(m\) сотрудников, работающих с клиентами, и один главный бухгалтер.
Для решения своих проблем в банк приходят гномы. Известно, что \(i\)-й гном приходит в банк через \(t_i\) минут после открытия банка. Сначала ему нужно провести \(a_i\) минут у одного из \(m\) сотрудников, а потом еще \(b_i\) минут в офисе главного бухгалтера.
Разумеется несколько гномов не могут одновременно находиться у одного сотрудника или в офисе главного бухгалтера, поэтому к сотрудникам и к главному бухгалтеру формируются очереди.
Очередь к сотрудникам общая, при этом гном из очереди идет к первому освободившемуся сотруднику. Если в банк одновременно приходят два гнома, то первым в очередь к сотрудникам встает тот, чей номер меньше. Если гном начал обслуживаться у сотрудника в момент \(x\), то он освобождается в момент \(x+a_i\), в этот момент другой гном может начать обслуживаться у этого же сотрудника. Гном, пришедший в банк в момент \(t\), может начать обслуживаться у сотрудника в любой момент, начиная с \(t\).
Решив свои проблемы у сотрудника, гном идет в очередь к главному бухгалтеру. Аналогично, если два гнома приходят в эту очередь одновременно, первым встает гном с меньшим номером, в момент, когда заканчивается обслуживание одного из гномов, может сразу начаться обслуживание следующего, гном может попасть к главному бухгалтеру, начиная с того момента, когда закончил обслуживаться у сотрудника.
Сегодня в банк собирается прийти \(n\) гномов, про каждого известно: во сколько он заходит в банк, сколько времени он хочет провести у окошка и сколько времени он хочет провести у бухгалтера. Нужно сообщить время выхода из банка для каждого гнома.
В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 100\,000\), \(1 \le m \le 10\))- число гномов и сотрудников, соответственно. Далее, в \(n\) строках задано по три целых числа \(t_i\), \(a_i\) и \(b_i\) (\(1 \le t_i, a_i, b_i \le 10^9\))- время прихода \(i\)-го гнома, сколько минут \(i\)-й гном должен провести у сотрудника банка и сколько минут он должен провести в офисе главного бухгалтера. Известно, что гномы заданы в порядке прихода в банк, то есть для любой пары \(i < j\) выполняется \(t_i \le t_j\),
Выведите \(n\) целых чисел, \(i\)-е число должно быть равно числу минут после открытия, когда \(i\)-й гном покинет банк.
4 2 1 3 3 1 2 2 2 2 1 2 1 4
8 5 9 13
Андрей очень любит играть в Космический покер.
В космическом покере вместо карт используются фишки трех цветов. Казино определяет
два числа \(A\) и \(C\) - коэффициенты для вычисления ставок. Затем игрок по определенным правилам
ставит фишки трех цветов: красного, зеленого и синего. Выигрыш игрока вычисляется по формуле:
A * (\(r^2\) + \(g^2\) + \(b^2\)) + C * min{\(r\), \(g\), \(b\)}, где \(r\), \(g\), \(b\) - количество фишек красного, зеленого и синего соответственно.
Правила, по которым делаются ставки, очень сложны, но сейчас перед Андреем стоит следующая задача. На поле уже есть \(r\) красных, \(g\) зеленых и \(b\) синих фишек. Прежде чем будет определен его выигрыш, он может добавить на поле ровно одну фишку любого цвета. Помогите ему выбрать цвет фишки, которую следует добавить на поле, чтобы максимизировать выигрыш.
Во входном файле содержится несколько игровых ситуаций, которые требуется проанализировать.
В первой строке задано одно целое число \(t\) (\(1 \le t \le 10\,000\)) - количество игровых ситуаций.
Каждая игровая ситуация описывается двумя строками. В первой строке задано два целых числа \(A\) и \(C\) (\(1 \le A, C \le 10\)) - коэффициенты для вычисления выигрыша. Во второй строке задано три целых числа \(r\), \(g\) и \(b\) (\(0 \le r, g, b \le 15\)) - количество фишек красного, зеленого и синего цвета, соответственно.
Выведите \(t\) строк. В \(k\)-ой строке выведите "RED", если оптимально добавить красную фишку, "GREEN", если оптимально добавить зеленую фишку или "BLUE", если оптимально добавить синюю фишку. Если есть несколько оптимальных вариантов, можно вывести любой из них
3 2 10 2 4 4 1 2 3 4 5 4 2 7 7 7
RED BLUE RED