Турнир Архимеда(52 задач)
Кировские командные турниры(8 задач)
Барнаульские командные турниры(10 задач)
Московская командная олимпиада(246 задач)
Командные чемпионаты школьников Санкт-Петербурга по программированию(167 задач)
ВКОШП(180 задач)
Около полугода назад было доказано, что проверка возможности прохождения уровня в классической игре Super Mario Bros. лежит в классе сложности PSPACE и, более того, является PSPACE -полной задачей. Мы не предлагаем вам понять, что это значит, но предлагаем почувствовать, насколько сложно бывает программно играть в компьютерные игры. Для этого мы опишем упрощённый вариант игры и предложим проверить, возможно ли пройти уровень в нашем варианте «Марио» или нет (для понимания задачи необязательно быть знакомым с оригинальной игрой).
Наш вариант игры происходит на клетчатом поле, состоящем из n строк на m столбцов. Каждая клетка поля может принадлежать одному из следующих видов:
Пронумеруем строки сверху вниз числами от 1 до n и столбцы слева направо целыми числами от 1 до m . Где-то в m -м столбце находится Принцесса (в клетке, обозначенной буквой ' p '). А в одной из клеток первого столбца стоит Марио (в клетке, обозначенной ' m '). Конечно, и Принцесса, и Марио стоят на земле, то есть в клетках, под каждым из них находится земля.
Также в некоторых столбцах от второго до ( m - 1) -го, возможно, находятся монетки. В одном столбце находится не более одной монетки, а также любая монетка лежит на земле, то есть в клетке под монеткой обязательно находится земля.
Марио, как и в классическом варианте игры, нужно добраться до Принцессы, но еще ему необходимо собрать все монетки, которые есть на поле. Марио может перемещаться только посредством прыжков.
Прыжок Марио состоит из двух частей: сначала он летит вертикально вверх, а потом горизонтально вправо. Вертикальная часть прыжка может иметь длину y от 0 до a клеток, а горизонтальная может иметь длину x от 0 до b клеток. В частности, Марио может прыгнуть вертикально вверх, не перемещаясь по горизонтали, а также прыгнуть горизонтально вправо, не смещаясь при этом по вертикали. Естественно, Марио не может пролетать сквозь клетки, содержащие землю. Обратите внимание, в отличие от оригинальной игры Марио не может перемещаться влево.
Если после окончания прыжка Марио оказывается в клетке, под которой нет земли, он падает вниз, пока под ним не окажется земля. В случае, если Марио долетает до n -й (самой нижней) строки, он проваливается вниз за экран и погибает, а игра заканчивается. Также Марио не может выпрыгивать за границы поля сверху или справа.
Если Марио оказывается в клетке с монеткой (возможно, в процессе прыжка), то он её подбирает.
Определите, возможно ли добраться до клетки с Принцессой, подобрав все монетки.
В первой строке содержится 4 целых числа n , m , a , b ( 2 ≤ n , m ≤ 100 , 1 ≤ a , b ≤ 10 ) — размеры поля и ограничения на длину прыжка Марио.
Далее следуют n строк по m символов, описывающих уровень. Каждый символ является одним из следующих: ' _ ', ' # ', ' c , ' m ', ' p ' (см. описание клеток в основной части условия).
Гарантируется, что на поле находятся единственная клетка с Марио и единственная клетка с Принцессой.
Гарантируется, что в каждом столбце от второго до ( m - 1) -го включительно находится не более одной монетки, а в первом и последнем столбце монеток нет.
Гарантируется, что Марио, Принцесса и монетки находятся в клетках, непосредственно под которыми есть клетки с землёй, в частности, Марио, Принцесса и монетки не находятся в n -й строке.
Выведите слово « YES » (без кавычек), если Марио может собрать все монетки с поля и оказаться в клетке с Принцессой, в противном случае выведите слово « NO » (без кавычек).
В первом примере Марио должен сделать два прыжка. Первым прыжком на 1 клетку вправо Марио подберёт монетку, а вторым на одну клетку вверх и две клетки вправо доберётся до принцессы.
Во втором примере Марио не может добраться до принцессы. Обратите внимание, Марио не может находиться в последней строке, так как он проваливается вниз за экран и погибает.
В четвёртом примере Марио не может сразу прыгнуть к Принцессе, потому что он должен подобрать монетку, но если он прыгнет вправо и вниз к монетке, то он не сможет потом вернуться обратно к Принцессе (обратите внимание, Марио не может вернуться обратно в стартовую точку, потому что он не умеет прыгать влево), поэтому ответ на этот тест — « NO ».
3 4 1 2 ___p mc_# ##_#
YES
4 5 10 3 __#_p mc__# ##___ _____
NO
5 3 3 2 ___ _#_ _#p m_# ##_
YES
4 4 1 3 m__p #__# _#c_ __#_
NO
Ивану с детства нравились газеты. У него даже была мечта стать главным редактором газеты. Однажды ему представился шанс осуществить свою мечту. Чтобы устроиться на работу в издательство, ему необходимо выполнить тестовое задание — сверстать рекламное объявление.
Задано поле шириной \(W\) и высотой \(H\). Объявление должно состоять из одной или нескольких строк, в которых необходимо разместить в заданном порядке \(N\) слов. Про \(i\)-е слово известно, что при печати в стандартном масштабе оно занимает прямоугольник шириной \(a_i\) и высотой \(b_i.\)
Чтобы объявление выглядело красиво, все слова в нем должны быть напечатаны в одном масштабе. При печати в масштабе \(k\) размеры всех слов умножаются на \(k\). Если исходно слово занимало прямоугольник \(a_i \times b_i\) , то при печати в масштабе \(k\) оно занимает прямоугольник размером \((k \cdot a_i) \times (k \cdot b_i)\). Кроме того, если в строке более одного слова, то все слова в ней должны иметь одинаковую высоту. Разумеется, ни одно слово не должно выходить за границы поля.
На рисунке приведен пример красивого объявления с тремя словами.
В первой строке входного файла дано три числа: \(N, \ W \ и \ H \ (1 \le N \le 100 000, 1 \le W, \ H \le 10^9 )\) — число слов в объявлении, длина и высота объявления. В следующих \(N\) строках дано по два целых числа, в \(i\)-й из них заданы \(a_i\) и \(b_i\) (\(1 \le a_i \ , b_i \le 10^9\) ) — ширина и высота \(i\)-го слова.
Выведите одно вещественное число \(k\) — максимальный масштаб. Ответ требуется вывести с
абсолютной или относительной погрешностью не более \(10^{−9}.\)
Это значит, что если правильный ответ
\(a\), а вы вывели \(p\), то ваш ответ будет засчитан как правильный, если \(\frac{|a \ - \ p|}{
max(|a|, \ 1)} \le 10^{−6}.\)
3 10 7 4 3 3 2 4 2
1.400000000000000
2 10 1 2 1 3 2
0.333333333333333
Иван живет в небольшом симпатичном домике в деревне. Вдоль его участка расположен забор, который недавно был выкрашен в красный цвет. Но тут в деревню к Ивану пришла цивилизация в лице рекламного агента, расклеивающего всюду свои объявления. И его забор постигла та же участь.
Каждый день на его забор приклеивают новое объявление. Таким образом за последние \(n\) дней на забор наклеено уже \(n\) объявлений и Ивану кажется, что рекламой заклеен уже весь забор, состоящий из \(m\) досок. Доски пронумерованы вдоль забора от \(1\) до \(m\).
Оказалось, что в каждый из \(n\) дней когда приходил рекламный агент и приклеивал объявление, сосед Ивана Петр записывал, какие доски оказывались заклеены этим объявлением. А именно, выяснилось что в \(i\)-й день очередное объявление было наклеено таким образом, что занимало доски с \(l_i\)-й по \(r_i\)-ю включительно. При этом рекламный агент вполне мог заклеить новым объявлением полностью или частично свое же собственное объявление.
Для составления жалобы в администрацию деревни Ивану необходимо удостовериться, что рекламой заклеен весь забор. Помогите ему выяснить, так ли это.
В первой строке входного файла даны два натуральных числа \(m\) и \(n\) — число досок в заборе и число дней, в течение которых вел свои наблюдения Петр (\(1 \le m \le 10 000, 1 \le n \le 1000\)). Далее, в \(n\) строках заданы целые числа \(l_i \ , r_i \ (1 \le l_i \le r_i \le m)\), \(i\)-я пара чисел описывает отрезок забора, который заклеивались объявлением в \(i\)-й день.
Выведите «YES», если весь забор был заклеен объявлениями, и «NO» в противном случае.
3 3 1 1 2 2 3 3
YES
Байтландия готовится к военным учениям. Это очень важное мероприятие, даже министр обороны Байтландии контролирует организацию учений на месте. Министр обороны обеспокоен тем, как же пройдут учения танков.
Байтландия состоит из островов, некоторые из которых соединены мостами. Каждый мост соединяет два различных острова, любые два острова соединены напрямую не более чем одним мостом. Байтландцы очень экономный народ, поэтому на каждый остров ведут не более двух мостов.
План мероприятия еще не готов, но известно, что план учений танков будет таким: танки должны будут проехать с одного острова на другой, пользуясь некоторыми мостами, причем не важно, какими именно мостами будут пользоваться танки. В Байтландии много мостов, которые были построены много лет назад и для танков совершенно не предназначены. Поэтому министр обороны решил укрепить некоторые мосты. А конкретно, он хочет укрепить несколько мостов так, чтобы вне зависимости от плана учений, выполнялось условие: если была возможность переехать с острова \(u\) на остров \(v\), то после укрепления некоторых мостов можно переехать с острова \(u\) на остров \(v\) по укрепленным мостам. При этом укрепление моста — дорогая операция, поэтому министр хочет укрепить минимальное число мостов.
Министр обороны Байтландии хочет знать, сколько существует различных способов укрепления минимального числа мостов. Два способа считаются различными, если существует мост, который укреплен в одном из способов и не укреплен в другом. Помогите министру обороны найти ответ на волнующий его долгое время вопрос. Поскольку ответ может быть довольно большим, выведите его по модулю \(10^9 \ + \ 7\).
В первой строке входного файла заданы два целых числа \(n\) и \(m\) \((1 \le n \le 10^5 , 0 \le m \le 10^5\) ) — количество островов и количество мостов в Байтландии соответственно.
В следующих m строках заданы мосты, по одному в строке. Каждый мост задан двумя целыми числами: \(v_i\) и \(u_i\) \((1 \le v_i , u_i \le n, v_i \ne u_i)\) — номера островов, которые соединяет мост с номером \(i\).
Гарантируется, что каждый мост задан во входном файле не более одного раза.
Гарантируется, что из каждого острова выходят не более чем два моста.
В выходной файл выведите единственное число: остаток от деления количества способов укрепления мостов на число \(10^9 \ + \ 7\).
В первом примере существует три способа укрепления мостов: укрепить мосты с номерами {1, 2, 4}, либо {1, 3, 4}, либо {2, 3, 4}.
5 4 1 2 2 3 1 3 4 5
3
2 1 1 2
1
Лягушонок Билли сидел на камне и любовался на закат, когда понял, что проголодался. Он огляделся и с удивлением обнаружил, что в ручье около него копошатся мошки. Ручей представляет собой прямую, на которой расположен и камень, на котором сидит Билли. Лягушонок был очень голоден, и потому захотел съесть всех мошек. У Билли очень длинный язык, поэтому он может, не спрыгивая с камня, съесть любую мошку (но только одну за раз).
Однако высовывать язык на большие расстояния не так-то просто, лягушонок на каждый сантиметр высунутого языка тратит одну единицу энергии. Каждый раз, когда Билли съедает мошку из какой-то точки происходит следующее: все мошки, сидящие слева от съеденной мошки, и все мошки, сидящие справа от нее в ужасе отпрыгивают от места событий на один сантиметр вдоль ручья. Мошки, которые сидят в той же точке, что и съеденная, настолько шокированы этим событием, что не двигаются.
Лягушонок Билли хочет понять — какое минимальное количество единиц энергии ему потребуется для того, чтобы съесть всех мошек. Помогите ему это выяснить.
В первой строке входного файла задано одно натуральное числа \(n \ (1 \le n \le 100 000)\) — количество мошек. Во второй строке входного файла задано \(n\) натуральных чисел — расстояния каждой из мошек до камня. Известно, что все мошки находятся на одной прямой по одну сторону от камня. Расстояния даны в порядке неубывания. Расстояния не превышают \(10^9\) .
Выведите одно число — минимальное количество единиц энергии, которое потребуется Билли, чтобы съесть всех мошек.
Сначала Билли съест одну мошку, сидящую в точке 4. Другая мошка, сидящая в этой точке не сдвинется, обе мошки из точки 2 сдвинутся в точку 1. После того, как он съест вторую мошку в точке 4, обе мошки из точки 1 отпрыгнут в точку 0, где и будут сразу съедены.
4 2 2 4 4
8