Алгоритмы

918 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

Пользователь вводит количество учеников, а затем для каждого — имя и оценку. Сохраните данные в словарь. Выведите пары в формате Имя — оценка, отсортированные по оценке в порядке убывания. Если оценки одинаковые, сохраните порядок ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 10\)).

Следующие \(N\) строк — имя и оценка (целое число) через пробел. Имена уникальны.

Формат выходных данных

\(N\) строк в формате Имя — оценка, отсортированные по убыванию оценки.

Пользователь вводит количество учеников, а затем для каждого — имя и оценку. Сохраните данные в словарь. Выведите пары в формате Имя — оценка, отсортированные по имени в алфавитном порядке.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 10\)).

Следующие \(N\) строк — имя и оценка через пробел. Имена уникальны, состоят из русских букв, начинаются с заглавной.

Формат выходных данных

\(N\) строк в формате Имя — оценка, отсортированные по имени (алфавитный порядок).

В расписании записаны моменты начала каждого урока (часы и минуты). Уроки идут в хронологическом порядке. Перерывом считается промежуток между концом одного урока и началом следующего. Каждый урок длится ровно 45 минут. Определите количество перерывов длительностью более 30 минут.

Формат входных данных

Каждая строка содержит два целых числа: часы и минуты начала урока (0 ≤ часы ≤ 20, 0 ≤ минуты ≤ 59). Последовательность заканчивается строкой «0 0». Она не является временем урока. Гарантируется, что уроков не менее двух.

Формат выходных данных

Одно число — количество перерывов длительностью строго более 30 минут.

Мурмурградск — город котиков! И, как и во всех таких городах, в Мурмурградске у каждого котика есть собственный дом, а у каждого домика — уникальный номер. Котики не любят мочить лапки, поэтому некоторые дома соединены специальными котодорожками, полностью защищенными от воды.

Многолетние исследования показали следующие примечательные черты Мурмурградска:

1. Дома и котодорожки представляют собой дерево, где дома — вершины, а котодорожки — ребра.

2. Между двумя домами есть котодорожка тогда и только тогда, когда котики в этих домах дружат.

Кошачий мэр решил, что для развития общей сплоченности каким-то котикам нужно будет поменять место жительства. При этом мэру важно, чтобы у всех оставалось свое личное пространство, поэтому никакие два котика не должны жить в одном доме после переезда. Мэр также понял, что, во избежание всеобщего хаоса, надо добавить в план немного стабильности: жители домика номер \(1\) должны остаться на месте.

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

У мэра слишком много дел, поэтому за помощью он обратился к вам! Он поставил перед вами следующую задачу: посчитать, сколько существует планов переезда, удовлетворяющих и критериям мэра, и критериям населения.

Так как это число может быть очень большим, необходимо посчитать его по модулю \(998244353\).

Формат входных данных
В первой строке записано одно целое число \(t\) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор данных состоит из нескольких строк. Первая строка набора данных содержит одно целое число \(n\) — количество вершин в дереве. Далее идут \(n - 1\) строк, каждая содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)) — две вершины, которые соединены ребром.

Гарантируется, что заданный граф является деревом, в нем отсутствуют петли и кратные ребра.

Формат выходных данных
Для каждого набора входных данных выведите в отдельной строке одно целое число — количество подходящих планов переезда по модулю \(998244353\).

 

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

Проводя весеннюю уборку, Вася наткнулся на ящик с клавишами и подсчитал, сколько раз встречается каждая клавиша. Теперь он хочет составить из этих клавиш одну строку и украсить ей интерьер своего кабинета. Вася считает, что чем больше различных подстрок длины k (последовательностей подряд идущих символов длины k) есть в этой строке, тем сильнее эта строка украсит интерьер. Помогите Васе с украшением.

Формат ввода

В первой строке задается количество наборов входных данных T. В этой задаче T всегда равно 1.

В первой строке каждого описания набора дано два целых числа m и k ( 1≤m≤3, 1≤k≤13 ) — число различных типов клавиш и требуемая длина различных подстрок.

В следующих m строках описываются клавиши. Каждое описание состоит из маленькой английской буквы Ci​, написанной на клавише, и числа Ti​ — количества таких клавиш. Гарантируется, что суммарное количество клавиш не превосходит 16.

Формат вывода

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

Вася открыл собственный классифайд (доску объявлений). Устроен его классифайд следующим образом: для каждого типа товара продавец с номером \(i\) может выставить на продажу только одну единицу товара и заранее указывает минимальную цену \(S_i\), за которую он готов его продать. Каждый покупатель может купить только одну единицу товара, покупатель с номером \(j\) указывает максимальную цену \(B_j\), за которую он готов купить товар. Раз в день Вася собирает все заявки и распределяет покупателей и продавцов, которые заключат сделку и по какой цене. При этом сделка между продавцом \(i\) и покупателем \(j\) может состояться только если \(S_i \le B_j\) по любой цене от \(S_i\) до \(B_j\) (цену назначает Вася).

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

Формат входных данных
В первой строке задается число наборов тестовых данных \(T\). В этой задаче \(T\) всегда равно 1.

В первой строке описания каждого набора записано число \(N\) (\(1 \le N \le 10\)) — количество продавцов.

В следующей строке записано \(N\) чисел \(S_i\) (\(1 \le S_i \le 100\)).

В следующей строке записано число \(M\) (\(1 \le M \le 10\)).

В следующей строке записано \(M\) чисел \(B_i\) (\(1 \le B_i \le 100\)).

Описания наборов отделяются друг от друга пустой строкой.

Формат выходных данных
Для каждого набора входных данных выведите одно число — максимальную суммарную стоимость проданных товаров.

В этой задаче на проверку необходимо сдать исходный код программы.

На перемене в школьной столовой образовалась очередь из n человек, в которой стоят мальчики и девочки. Изначально ребята встали в таком порядке, в котором они забежали в столовую. Однако через некоторое время мальчикам стало неловко, что они стоят в очереди перед девочками, и они стали каждую секунду пропускать девочек вперед.

Опишем процесс более точно. Пусть позиции в очереди последовательно пронумерованы целыми числами от 1 до n, причем тот, кто стоит на позиции номер 1 обслуживается первым. Тогда, если в момент времени x на i-ой позиции стоит мальчик, а на (i + 1)-ой — девочка, то в момент времени x + 1 на i-ой позиции будет находиться девочка, а на (i + 1)-ой — мальчик. Моменты времени заданы в секундах.

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

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

В первой строке заданы два целых числа n и t (1 ≤ n, t ≤ 50), обозначающие количество ребят в очереди и время, спустя которое требуется определить, как будет выглядеть очередь.

В следующей строке задана строка s, обозначающая начальную расстановку школьников. Если на i-ой позиции в очереди стоит мальчик, то i-ый символ строки s равен «B», иначе i-ый символ равен «G».

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

Выведите строку a, обозначающую расположение ребят в очереди спустя t секунд. Если на i-ой позиции через заданное время будет стоять мальчик, то i-ый символ a должен быть равен «B», иначе он должен быть равен «G».

Вы играете в игру «Бинарная Сила» и управляете персонажем, у которого есть 𝑑 = 2𝑛 навыков, пронумерованных 1 до 𝑑. Эти навыки расположены на листьях полного двоичного дерева высоты 𝑛, изначально все навыки имеют уровень 1. Пример такого дерева для 𝑛 = 3 приведен на иллюстрации ниже.



После этого вы начинаете прокачивать навыки следующим образом.
• Навыки прокачиваются посредством заполнения двоичного дерева снизу вверх.
• Для очередной вершины дерева вы должны выбрать и записать в нее один из двух навыков, записанных в
непосредственных детях этой вершины (на рисунке из детей в родителя ведут стрелки).
• Уровнем навыка считается число вершин, в которых выбран этот навык.
Пример корректного распределения навыков по дереву для 𝑛 = 3 приведен ниже.


В этом примере первый навык имеет уровень 4, седьмой – уровень 3, четвертый и пятый – уровень 2, а второй, третий, шестой и восьмой не были прокачаны ни разу, поэтому остались на уровне 1.
Кроме прокачки персонажа, в игре есть 𝑚 различных квестов, с помощью которых можно получать монетки. Квесты активируются после того, как все дерево навыков было заполнено.
Квесты бывают трех типов:
1. «𝑙𝑒𝑠𝑠 𝑥𝑖 𝑘𝑖 𝑠𝑖» – вы получите 𝑠𝑖 монет, если уровень навыка с номером 𝑥𝑖 окажется строго меньше 𝑘𝑖 .
2. «𝑒𝑥𝑎𝑐𝑡 𝑥𝑖 𝑘𝑖 𝑠𝑖» – вы получите 𝑠𝑖 монет, если уровень навыка с номером 𝑥𝑖 окажется равен 𝑘𝑖 .
3. «𝑙𝑒𝑠𝑠 𝑥𝑖 𝑘𝑖 𝑠𝑖» – вы получите 𝑠𝑖 монет, если уровень навыка с номером 𝑥𝑖 окажется строго больше 𝑘𝑖 .
Так как монеты – очень ценный ресурс в игре «Бинарная Сила», вы хотите узнать максимальное количество монет, которое возможно получить с помощью имеющихся квестов после улучшения всех навыков.

Формат входных данных
Каждый тест состоит из нескольких независимых наборов входных данных. Первая строка содержит одно целое число 𝑡 – количество наборов входных данных (1 ≤ 𝑡 ≤ 104). Далее следует описание наборов входных данных.
Каждый набор начинается со строки, содержащей два целых числа 𝑛 и 𝑚 – высоту дерева навыков и количество квестов соответственно (1 ≤ 𝑛 ≤ 15; 0 ≤ 𝑚 ≤ 50 000). Число навыков при этом равно 𝑑 = 2𝑛.
Далее следуют 𝑚 строк, 𝑖-я из которых содержит четыре целых числа 𝑡𝑖, 𝑥𝑖, 𝑘𝑖, 𝑠𝑖 – тип квеста и его описание (1 ≤ 𝑡𝑖 ≤ 3; 1 ≤ 𝑥𝑖 ≤ 𝑑; 1 ≤ 𝑘𝑖 ≤ 𝑛; 1 ≤ 𝑠𝑖 ≤ 109). Типы квестов следуют в том же порядке, в котором они перечислены в условии: 𝑡𝑖=1 соответствует квесту типа «𝑙𝑒𝑠𝑠», 𝑡𝑖 = 2 – квесту типа «𝑒𝑥𝑎𝑐𝑡» и 𝑡𝑖 = 3 – квесту типа «𝑚𝑜𝑟𝑒».
Гарантируется, что сумма 𝑑 по всем наборам входных данных не превосходит 216 и сумма 𝑚 по всем наборам входных данных не превосходит 50 000

Формат выходных данных
Для каждого набора выходных данных в отдельной строке выведите единственное число – максимальное количество монет, которые можно заработать.
 
Известный завод ждет реорганизация — его собираются переоборудовать 𝑛 новейшими станками. Перед тем, как эти станки будут установлены, требуется разработать интерфейс для обработки задач на этих станках.
После реорганизации наладчик завода будет распределять поступающие задачи между станками. У каждой задачи есть длительность. У каждого станка есть независимая очередь задач, причем новую задачу можно добавить либо строго в конец этой очереди, либо строго в начало, если это срочная задача.
Станки работают строго в порядке очереди, обрабатывая задачи подряд. Как только станок завершает задачу, он сразу же начинает работу над следующей в очереди, если такая есть. На переключение между задачами время не тратится.
Формально определим время начала работы над задачей как первый момент времени, после которого прогресс по задаче строго увеличится. Так, если в момент времени 𝑡 на свободный станок приходят сначала обычная задача 𝐴 и затем срочная задача 𝑈, временем начала 𝑈 станет 𝑡, а временем начала 𝐴 — момент завершения 𝑈.
Аналогично, время завершения работы над задачей — первый момент времени, когда прогресс по задаче достигает ее длительности. Так, если в момент времени 𝑡 прогресс по задаче 𝐴 достиг ее длительности, и станку поступил запрос на обработку срочной задачи 𝑈, временем завершения 𝐴 все равно будет 𝑡.
Для большего понимания советуем после прочтения условия ознакомиться с иллюстрацией внизу.
Всего поддерживается четыре типа запросов.
  1. Добавить задачу номер 𝑖 длительностью 𝑑 в конец очереди 𝑘-го станка.
    Если его очередь до этого была пустой, станок тут же начинает работу над добавленной задачей
  2. Отменить задачу с номером 𝑖. Если эта задача еще не была начата, она удаляется из очереди, а порядок остальных задач в очереди не меняется. Если эта задача уже была начата, работа над ней тут же останавливается, и станок берет в работу следующую задачу из очереди. Если эта задача уже была завершена или такой задачи не было, запрос отмены игнорируется
  3. Добавить срочную задачу с номером 𝑖 длительностью 𝑑 в начало очереди 𝑘-го станка. В этом случае работа над текущей задачей (если она есть) на 𝑘 -м станке приостанавливается с сохранением прогресса, и в работу берется данная срочная задача.
    До момента завершения срочной задачи все запросы добавления или отмены новых задач к станку номер 𝑘 игнорируются для экономии ресурсов. Иными словами, если в момент времени 𝑡 поступил запрос добавления срочной задачи, все следующие запросы, поступающие к 𝑘-му станку в моменты времени с 𝑡 включительно до 𝑡 + 𝑑 не включительно будут проигнорированы.
    По завершении срочной задачи, если работа над какой-то обычной задачей в очереди была приостановлена, эта задача без задержек возвращается в обработку.
  4. Вывести ожидаемый момент времени завершения работы 𝑘-го станка.
    Для станка без задач в очереди «ожидаемым» временем завершения его работы будем считать текущий момент времени.
Еще раз обратите внимание, что во время исполнения срочной задачи станок игнорирует только все запросы добавления и отмены задач (включая добавление другой срочной задачи). Про запрос отмены будем считать, что он идет к тому станку, в очереди которого лежит соответствующая задача. Запросы вывода ожидаемого момента завершения работы не игнорируются.
Вам необходимо помочь наладчику и вывести для каждой задачи время начала и завершения работы над ней.


Формат входных данных
В первой строке дано целое число 𝑇 (1 ≤ 𝑇 ≤ 1000) — количество наборов входных данных. В первой строке описания набора входных данных через пробел даны два целых числа 𝑛 и 𝑞 (1 ≤ 𝑛, 𝑞 ≤ 105) —
количество станков и количество запросов. Гарантируется, что сумма 𝑛 и сумма 𝑞 по всем наборам входных данных обе не превосходят 105.
В следующих 𝑞 строках описаны запросы к заводу в одном из следующих форматов:
1. «𝑡 𝑠𝑐ℎ𝑒𝑑𝑢𝑙𝑒 𝑖 (𝑑) 𝑜𝑛 𝑘» — добавить задачу на 𝑘-й станок;
2. «𝑡 𝑐𝑎𝑛𝑐𝑒𝑙 𝑖» — отменить задачу;
3. «𝑡 𝑢𝑟𝑔𝑒𝑛𝑡 𝑖 (𝑑) 𝑜𝑛 𝑘» — добавить срочную задачу на 𝑘-м станке;
4. «𝑡 𝑒𝑥𝑝𝑒𝑐𝑡𝑎𝑡𝑖𝑜𝑛 𝑘» — узнать текущее ожидаемое время завершения работы 𝑘-го станка.
Параметр 𝑡 — момент совершения запроса (целое неотрицательное число от 0 до 109). Для всех запросов выполняется 1 ≤ 𝑘 ≤ 𝑛, 1 ≤ 𝑖 ≤ 109 и 1 ≤ 𝑑 ≤ 109.
Также гарантируется, что номера задач (𝑖) уникальны и не повторяются, а запросы упорядочены по времени, то есть 𝑡 каждого следующего запроса не меньше, чем 𝑡 предыдущего.


Формат выходных данных
Выведите в отдельной строке текущее ожидаемое время работы соответствующего станка после каждого запроса типа «𝑒𝑥𝑝𝑒𝑐𝑡𝑎𝑡𝑖𝑜𝑛».
Затем выведите по строке на каждую задачу, запрос на добавление которой не был проигнорирован. Задачи должны быть упорядочены по возрастанию их номеров. В каждой строке через пробел должны быть выведены три числа: номер задачи, время начала ее обработки и время конца ее обработки (или отмены, если задача была отменена до завершения).
Для задач, которые были отменены до начала работы над ними, считайте время начала равным времени первого запроса их отмены.



Замечание
В первом примере из условия обе задачи будут обработаны по расписанию: с 0 до 10 и с 4 до 7 соответственно.
Во втором примере:
1. первая задача должна обрабатываться на первом станке в период [0, 5];
2. вторая задача должна обрабатываться на втором станке в период [0, 5];
3. в момент времени 2 срочная задача номер 3 добавляется на первый станок; она будет обрабатываться в период [2, 7];
4. в момент времени 6 первому станку нужно еще 4 единицы времени на завершение задач 4 и 1; второй станок завершил работу в момент времени 5, а третий станок вообще не начинал работу — для них время ожидания до завершения работы равно 0.

Подробная иллюстрация к третьему примеру приведена ниже. Здесь синим обозначен прогресс по задачам, зеленым — завершенные задачи, красным — отмененные, а градиентом — срочные. Все интервалы короче 1 единицы времени (см. отмененную задачу 3) стоит воспринимать как интервалы длительностью 0.





 

Монотонная подпоследовательностьстандартный вводстандартный вывод1 секунда256 мегабайт

Рассмотрим последовательность \(a_1, a_2, \ldots, a_n\). Его подпоследовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\), где \(1 \le i_1 < i_2 < \ldots < i_k \le n\) назвается монотонной, если либо \[a_{i_1} \le a_{i_2} \le \ldots \le a_{i_k},\] либо \[a_{i_1} \ge a_{i_2} \ge \ldots \ge a_{i_k}.\]

Для заданных \(n\) и \(k\), найдите последовательность, состоящую из чисел от 1 до \(n\) таких, что каждое из чисел встречается в ней ровно один раз, а длина самой длинной монотонной подпоследовательности (возрастающей или убывающей) составляет ровно \(k\).

Формат входных данных
Первая строка входных данных содержит целые числа \(n\) и \(k\) (\(1 \le k \le n \le 10^6\)), длина последовательности и требуемая длина самой длинной монотонной подпоследовательности.

Формат выходных данных
Если требуемой последовательности не существует, выведите \(-1\) в первой и единственной строке.

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

 

 

Рассмотрим натуральное число \(x\). Требуется прибавить к нему минимальное возможное целое неотрицательное число \(y\), чтобы двоичная запись получившегося числа \(x+y\) имела ровно \(k\) единиц.

Формат входных данных
Первая строка ввода содержит натуральное число \(x\) (\(1 \le x \le 10^{18}\)).

Вторая строка ввода содержит натуральное число \(k\) (\(1 \le k \le 60\)).

Формат выходных данных
Выведите минимальное возможное целое неотрицательное число \(y\), такое что двоичная запись числа \(x+y\) имеет ровно \(k\) единиц.

Постулат Бертрана утверждает, что для любого \(n \ge 2\) найдётся простое число \(p\), для которого \(n < p < 2n\). Постулат Бертрана был сформулирован в качестве гипотезы в 1845 году французским математиком Бертраном, проверившим её до \(n = 3\,000\,000\), и доказан в 1852 году Чебышёвым.

Петя хочет повторить подвиг Бертрана и убедиться в справедливости его постулата для разных значений \(n\). Однако, поскольку он не сомневается в корректности доказательства Чебышёва, он немного изменил цель: для данного \(n\), Петя хочет найти максимальный по длине отрезок составных чисел, который лежит строго между \(n\) и \(2n\).

Требуется найти такие \(l\) и \(r\), чтобы \(n < l \le r < 2n\), все числа от \(l\) до \(r\), включительно, были составными и \(r - l\) было максимально. Если подходящих отрезков несколько, необходимо вывести тот, у которого \(l\) минимально.

Формат входных данных
На вход подаётся одно целое чиcло \(n\) (\(3 \le n \le 10^7\)).

Формат выходных данных
Выведите искомые \(l\) и \(r\).

Ферма Джона представляет собой квадратную решётку из \(N \times N\) полей (\(2 \leq N \leq 100\)). Определённые пары соседних полей (север-юг или запад-восток) разделены дорогами, и высокий забор идёт вокруг периметра всей решётки, не давая коровам возможности покинуть ферму. Коровы могут свободно перемещаться с любого поля на любое соседнее поле (на сервер, юг, запад, восток), хотя они предпочитают переходить дороги только когда это абсолютно необходимо.

Имеется \(K\) коров (\(1 \leq K \leq 100, K \leq N^2\)) на ферме, каждая расположена в различном поле. Пара коров называется "далёкой", если для того чтобы одна корова смогла посетить другую, необходимо перейти хотя бы одну дорогу. Помогите ФД посчитать количество пар удалённых коров.

ФОРМАТ ВВОДА (файл countcross.in):

Первая строка ввода содержит \(N\), \(K\), \(R\). Следующие \(R\) строк описывают \(R\) дорог существующие между парами соседних полей. Каждая строка имеет вид \(r\) \(c\) \(r'\) \(c'\) (целые числа в интервале \(1 \ldots N\)), указывающих, что имеется дорога между соседними полями (строка \(r\), колонка \(c\) и строка \(r'\), колонка \(c'\)). Последние \(K\) строк описывают местоположение \(K\) коров (строка, колонка).

ФОРМАТ ВЫВОДА (файл countcross.out):

Выведите количество пар "далёких" коров.

Коровы Фермера Джона учатся переходить через дорогу эффективно. И ищут цыплят в качестве учителей.

Цыплята очень занятые существа и имеют ограниченное время для помощи коровам. Всего имеется \(C\) цыплят на ферме (\(1 \leq C \leq 20,000\)), последовательно пронумерованных \(1 \ldots C\), и каждый цыплёнок \(i\) может помогать коровам ровно время \(T_i\). Коровы никуда не торопятся. Всего имеется \(N\) коров на ферме (\(1 \leq N \leq 20,000\)), последовательно пронумерованных \(1 \ldots N\), и корова \(j\) способно переходить дорогу между временами \(A_j\) и \(B_j\). В идеале корова \(j\) хочет найти цыплёнка \(i\), который поможет её перейти через дорогу. Для того, чтобы их расписания были совместимы, необходимо чтобы выполнялось неравенство \(A_j \leq T_i \leq B_j\).

Если для каждой коровы может быть взят в пару не более чем один цыплёнок и каждый цыплёнок может быть взят в пару не более чем с одной коровой, помогите найти максимальное количество пар корова-цыплёнок, которого можно достичь.

ФОРМАТ ВВОДА (файл helpcross.in):

Первая строка ввода содержит \(C\) и \(N\). Следующие \(C\) строк содержат \(T_1 \ldots T_C\), а последующие \(N\) строк содержат \(A_j\) и \(B_j\) (\(A_j \leq B_j\)) для \(j = 1 \ldots N\). \(A\), \(B\), \(T\)' – все неотрицательные числа (не обязательно различные) не более 1,000,000,000.

ФОРМАТ ВВОДА (файл helpcross.out):

Вычислите максимально-возможное количество пар корова-цыплёнок.

Фермер Джон растит \(N\) пород коров (\(1 \leq N \leq 1000\)), последовательно пронумерованных \(1 \ldots N\). Некоторые пары пород не так дружественны, как другие и это определяется номерами пород: породы \(a\) и \(b\) дружественны если \(|a - b| \leq 4\), и не дружественны в противном случае.

Длинная дорога проходит через ферму Джона. Имеется последовательность из \(N\) полей на одной стороне дороги (по одному полю для каждой породы), и последовательность из \(N\) полей на другой стороне дороги, также по одному полю для каждой породы. Чтобы помочь своим коровам безопасно переходить дорогу, ФД хочет нарисовать "зебры" через дорогу. Каждая "зебра" должна соединить поле на одной стороне дороги с полем на другой стороне дороги где два поля имеют дружественные породы коров.

По заданному порядку \(N\) полей на каждой стороне дороги определите максимальное количество зебр, которые он может нарисовать так, чтобы они не пересекались.

ФОРМАТ ВВОДА (файл nocross.in):

Первая строка ввода содержит число \(N\). Следующие \(N\) строк описывают порядок, по номерам пород полей вдоль одной стороны дороги. Каждый номер породы - это целое число в интервале \(1 \ldots N\). Последние \(N\) строк описывают порядок, по номерам пород полей вдоль другой стороны дороги. Каждая порода появится ровно один раз в каждом порядке.

ФОРМАТ ВЫВОДА (файл nocross.out):

Выведите максимальное количество непересекающихся "дружественных зебр", которые ФД может нарисовать вдоль дороги.

Ферма Джона представляет собой решётку из \(N \times N\) квадратных полей (\(3 \leq N \leq 100\)), и \(N-1\) дороги "север-юг" и \(N-1\) дороги "запад-восток", проходящих внутри фермы и служащих разделителями между полями. Высокий забор вокруг фермы по её внешнему периметру, препятствует выходу коров за пределы фермы. Беси может свободно перемещаться с любого поля на любое соседнее поле (на север, юг, запад, восток). Ей требуется \(T\) единиц времени на переход дороги (\(0 \leq T \leq 1,000,000\)).

Однажды ФД пригласил Беси посетить его дом поиграть в шахматы. Беси начинает с северо-западного углового поля фермы, а дом ФД находится на южно-восточном углу поля. Поскольку Беси становится голодной во время пути, она останавливается на каждом третьем поле, которое посетит, поесть траву (не включая стартовое поле, но включая возможно финальное поле, где расположен дом ФД). Некоторые поля травянистее, чем другие, поэтому количество времени, которое она потратит на еду на поле, зависит от поля, на котором она остановилась.

Помогите Беси определить минимальное количество времени, которое может ей потребоваться, чтобы добраться до дома ФД.

ФОРМАТ ВВОДА (файл visitfj.in):

Первая строка ввода содержит \(N\) и \(T\). Каждая из следующих \(N\) строк содержит \(N\) положительных целых чисел (каждое не более 100,000), описывающих количество времени, требуемое чтобы съесть траву на каждом поле. Первое число в первой строке это северо-западный угол.

ФОРМАТ ВВОДА (файл visitfj.out):

Выведите минимальное количество времени, которое требуется Беси чтобы добраться до дома ФД.

Расположение фермы Джона весьма своеобразно, с большой круглой дорогой вокруг - по периметру большого поля, на котором его коровы пасутся каждый день. Каждое утро коровы пересекают эту дорогу на пути к полю, и каждый вечер они пересекают её ещё раз, когда возвращаются в амбар.

Кк известно, коровы - существа привычки, и они пересекают дорогу одним и тем же способом каждый день. Каждая корова входит на поле в точке, отличной от той, в которой она выходит с поля и все эти точки отличаются друг от друга. У ФД ровно 26 коров, которые лениво названы от A до Z и поэтому на поле имеется ровно 52 точки. ФД записал эти точки по часовой стрелке, записав букву - имя коровы, для которой эта точка. В результате ФД получил строку из 52 символов, в которой каждая буква алфавита встречается ровно дважды. Он не записывал, какая точка для входа, какая - для выхода.

Разглядывая свою карту точек, ФД заинтересовался, сколько раз могут пересечься пути различных пар коров. Он называет пару коров \((a,b)\) "пересекающейся" парой, если путь коровы \(a\) от входа к выходу должен пересечь путь коровы '\(b\)' от входа к выходу. Помогите ФД посчитать общее количество пересекающихся пар.

ФОРМАТ ВВОДА (файл circlecross.in):

Ввод состоит из одной строки, содержащей 52 больших латинских символа. Каждая буква алфавита появится ровно 2 раза.

ФОРМАТ ВЫВОДА (файл circlecross.out):

Общее количество пересекающихся пар.

Фермер Джон получил заказ доставить ровно \(M\) единиц молока (\(1 \leq M \leq 200\)). К несчастью, его доильная машина сломалась и у него есть только два бидона с целочисленными размерами \(X\) и \(Y\) (\(1 \leq X, Y \leq 100\)), с помощью которых он может отмерять молоко. Оба бидона изначально пусты. Используя их, он может выполнять до \(K\) операций следующих типов (\(1 \leq K \leq 100\)):

- Он может заполнить любой бидон полностью

- Он может опорожнить полностью любой бидон.

- Он может переливать содержимое одного бидона в другой до тех пока, пока первый бидон не станет пустым, или второй бидон не станет полным (в зависимости от того, что произойдёт раньше).

ФД понял, что он может и не отмерять ровно \(M\) единиц молока, в двух бидонах. Помогите ему определить минимальную разность между \(M\) и суммарным молоком в двух баллонах. То есть, определите минимальное значение \(|M-M'|\) такое, что ФД может получить \(M'\) единиц молока в сумме содержимого двух бидонов.

ФОРМАТ ВВОДА (файл pails.in):

Первая и единственная строка ввода содержит \(X\), \(Y\), \(K\), \(M\).

ФОРМАТ ВЫВОДА (файл pails.out):

Выведите минимальное расстояние от \(M\), до количества молока, которое ФД сможет получить.

Коровы Фермера Джона стоят в различных точках \((x_1, y_1) \ldots (x_n, y_n)\) его поля (\(1 \leq N \leq 1000\), все \(x_i\) и \(y_i\) - положительные нечётные целые числа, не превышающие \(1,000,000\). ФД хочет разделить своё поле изгородью бесконечной длины с севера на юг, описываемой уравнением \(x=a\) (\(a\) - чётное целое, так обеспечивается, что изгородь не пройдёт через позицию ни одной коровы). Также он хочет построить изгородь бесконечной длины с востока на запад, которая описывается уравнением \(y=b\), где \(b\) - чётное целое. Эти две изгороди пересекаются в точке \((a,b)\), и вместе делят поле на четыре региона.

ФД хочет выбрать \(a\) и \(b\) так, чтобы получить "сбалансированное" количество коров во всех регионах, т.е. чтобы не было региона, который содержит слишком много коров. Пусть \(M\) - максимальное количество коров в этих четырёх регионах, ФД хочет, чтобы \(M\) было как можно меньше. Помогите ФД определить это минимально возможное значение для \(M\).

ФОРМАТ ВВОДА (файл balancing.in):

Первая строка ввода содержит два целых числа, \(N\) и \(B\). Каждая из следующих \(n\) строк содержит местоположение одной коровы, указанное её координатами \(x\) и \(y\).

ФОРМАТ ВЫВОДА (файл balancing.out):

Выведите минимально возможное значение \(M\), которое может достичь ФД оптимальным расположением изгородей.

Будучи фанатом современной архитектуры, Фермер Джон построил новый амбар в форме круга. Внутри амбар составляет кольцо из \(n\) комнат, пронумерованных по часовой стрелке \(1 \ldots n\) по периметру (\(3 \leq n \leq 1,000\)). Каждая комната имеет двери в две соседние комнаты, а также дверь из амбара во внешний мир.

У ФД есть ровно \(n\) коров, и он хочет поместить по одной корове в каждую комнату. Однако своенравные коровы выстроились не как нужно, и возможно несколько коров собрались у одной внешней двери. А именно, \(c_i\) коров стоит перед дверью с номером \(i\). Разумеется, \(\сумма c_i = n\).

Чтобы коровы добрались до своих мест ФД собирается применить следующий подход: каждая корова входит в дверь, перед которой она стоит и идёт по часовой стрелке в свою комнату. В предположении, что проход коровы через \(d\) дверей отнимает у неё \(d^2\) энергии, определите минимальное количество энергии, которое требуется, чтобы распределить коров по одной в комнату.

ФОРМАТ ВВОДА (файл cbarn.in):

Первая строка ввода содержит \(n\). Оставшиеся \(n\) строк содержат \(c_1 \ldots c_n\).

ФОРМАТ ВЫВОДА (файл cbarn.out):

Выведите минимальное количество энергии, потреблённое всеми коровами.

Поделиться
Класснуть