Алгоритмы

2 280 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Каждый день Фермер Джон доит своих 8 коров, которых зовут Bessie, Buttercup, Belinda, Beatrice, Bella, Blue, Betsy, и Sue.

К несчастью, коровы довольно разборчивы и требуют, чтобы ФД доил их в порядке, который соответствует \(N\) ограничениям (\(1 \leq N \leq 7\)). Каждое из ограничений имеет вид "\(X\) must be milked beside \(Y\)" ("\(X\) необходимо подоить рядом \(Y\)"), что означает, что в порядке дойки корову \(X\) нужно доить сразу после коровы \(Y\) или непосредственно перед коровой \(Y\).

Пожалуйста, помогите ФД определить порядок дойки его коров, который удовлетворяет всем требуемым ограничениям. Гарантируется, что такое упорядочивание всегда возможно. Если возможно несколько упорядочиваний, выведите первое из них в алфавитном порядке. То есть, первая корова должна иметь наименьшее в алфавитном порядке имя из всех возможных имён, которые могут быть первыми. Среди всех упорядочиваний, начинающихся с этой же первой коровы, вторая корова должна быть наименьшей в алфавитном порядке среди всех корректных упорядочиваний и т.д.

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

Первая строка ввода содержит \(N\). Каждая из последующих \(N\) строк содержит предложение описывающее ограничение вида "\(X\) must be milked beside \(Y\)" где \(X\) и \(Y\) - имена некоторых их коров ФД (8 возможных вариантов перечислены в начале условия задачи).

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

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

Чтобы улучшить свои фигуры коровы занялись гимнастикой. Фермер Джон назначил любимую корову Бесси тренером для \(N\) других коров. В каждом из \(K\) практических занятий (\(1 \leq K \leq 10\)), Бесси ранжирует \(N\) коров в соответствии с их результатами (\(1 \leq N \leq 20\)).

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

Помогите Бесси вычислить количество состоятельных пар.

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

Первая строка входного файла содержит два положительных целых числа \(K\) и \(N\). Каждая из следующие \(K\) строк содержит целые числа \(1 \ldots N\) в некотором порядке, указывающих ранжирование коров (коровы обозначены числами \(1 \ldots N\)). Если \(A\) появилась раньше \(B\) в одной из этих строк, то корова \(A\) выполнила это упражнение лучше, чем корова \(B\).

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

В одной строке выведите количество состоятельных пар.

Беси начал изучать алгоритмы с различных WEB-ресурсов.

Её любимый алгоритм - пузырьковая сортировка. Ниже приведена его реализация в коровьем коде, которая сортирует массив \(A\) длины \(N\).

sorted = false
while (not sorted):
   sorted = true
   moo
   for i = 0 to N-2:
      if A[i+1] < A[i]:
         swap A[i], A[i+1]
         sorted = false

Команда "moo" выводит слово "moo".

По данному массиву предскажите, сколько раз будет напечатано слово "moo" этим кодом Беси.

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

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)). Следующие \(N\) строк описывают \(A[0] \ldots A[N-1]\), каждая - целое число в интервале \(0 \ldots 10^9\). Не гарантируется, что все элементы различны.

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

Выведите, сколько раз будет напечатано слово "moo"

Сегодня на ферме жаркий летний день и Фермер Джон развозит лимонад своим \(N\) коровам. Все \(N\) коров (последовательно пронумерованных \(1 \dots N\)) любят лимонад, но некоторые из них любят больше чем другие. В частности, корова \(i\) готова подождать не более \(w_i\) коров прежде чем получит свой лимонад. Прямо сейчас все \(N\) коров на полях, но вскоре ФД позвонит в колокол и коровы побегут к нему. Все прибудут до того, как он начнёт раздавать лимонад, но никакие две коровы не прибудут в одно и то же время. Более того, когда корова \(i\) прибывает, она становится в очередь если и только если в очереди находится не более \(w_i\) коров.

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

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

Первая строка ввода содержит \(N\), вторая строка содержит \(N\) разделённых пробелом целых чисел \(w_1, w_2, \dots, w_N\). Гарантируется, что \(1 \leq N \leq 10^5\), и \(0 \leq w_i \leq 10^9\) для каждой коровы \(i\).

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

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

Беси сделала гибрид из двух любимых алгоритмов пузырьковой сортировки и быстрой сортировки:

Назовём позицию между элементами \(i\) и \(i+1\) массива \(A\) точкой разбиения если максимум из \(A[...i]\) не больше чем минимум \(A[i+1 \ldots]\). Беси помнит, что быстрая сортировка реорганизует массив так, чтобы у него появилась точка разбиения, а затем рекурсивно сортирует две стороны \(A[...i]\) и \(A[i+1 \ldots]\). Однако хотя она помнит, что все точки разбиения можно найти за линейное время, она забыла как в быстрой сортировке реорганизуется массив, чтобы быстро создать точку разбиения. Она решила использовать пузырьковую сортировку для решения этой задачи

Ниже приведен алгоритм Беси Сначала она написала простую функцию, которая делает один проход пузырьковой сортировки:

bubble_sort_pass (A) {
   for i = 0 to length(A)-2
      if A[i] > A[i+1], swap A[i] and A[i+1]
}

Рекурсивный код Беси для "быстрой" сортировки такой:

quickish_sort (A) {
   if length(A) = 1, return
   do { // Main loop
      work_counter = work_counter + length(A)
      bubble_sort_pass(A)
   } while (no partition points exist in A) 
   divide A at all partition points; recursively quickish_sort each piece
}

Теперь Беси интересно, насколько быстро работает её код. Для простоты она считает, что её итерация работает линейно и поэтому она просто инкрементирует глобальную переменную work_counter внутри цикла текущим размером массива так, чтобы оценивать общую работу, выполненную алгоритмом.

По заданному входному массиву, предскажите финальное значение величины work_counter после завершения алгоритма quickish_sort.

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

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)). Следующие \(N\) строк описывают \(A[0] \ldots A[N-1]\), каждый из которых является целым числом в интервале \(0 \ldots 10^9\). Не гарантируется, что все элементы различны.

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

Выведите конечное значение величины work_counter

Ферма Джона состоит из \(N\) пастбищ (\(2 \leq N \leq 50,000\)), попарно соединённых \(N-1\) двунаправленными дорожками единичной длины. Известно также, что имеется путь из любого пастбища к любому.

Однако если одну из дорожек заблокировать, то ферма разделится на две части, внутри каждой из которых связность сохранится, а между ними - нет. Поэтому ФД строит \(M\) дополнительных дорожек (\(1 \leq M \leq 50,000\)), каждая из которых имеет положительную целую длину не более \(10^9\). Коровы пользуются исходными дорожками, пока это возможно.

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

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

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

Первая строка ввода содержит \(N\) и \(M\). Каждая из последующих \(N-1\) строк описывает оригинальную дорожку целыми числами \(p\) \(q\), где \(p\) \neq q$ - пастбища, соединённые этой дорожкой (в интервале \(1 \ldots N\)). Каждая из оставшихся \(M\) строк описывает дополнительную дорожку тремя целыми числами \(p\), \(q\), \(r\), где \(r\) длина этой дорожки. Не более одной дорожки пролегает между любыми двумя пастбищами.

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

Для каждой из \(N-1\) оригинальных дорожек, в порядке как они появились на вводе, выведите длину кратчайшей "замещающей" дорожки, которая восстановит связность фермы в результате блокировки оригинальной дорожки. Если такой дорожки не существует, выведите -1.

Беси изучает алгоритмы на web-ресурсах.

Её любимый алгоритм называется "пузырьковая сортировка". Ниже приведена начальная его версия в коровьем коде для сортировки массива \(A\) из \(N\) элементов.

sorted = false
while (not sorted):
   sorted = true
   moo
   for i = 0 to N-2:
      if A[i+1] < A[i]:
         swap A[i], A[i+1]
         sorted = false

Команда "moo" выводит слово "moo".

После тестирования кода на нескольких массивах, Беси сделала интересное наблюдение: в то время ка большие элементы становятся в конец массива очень быстро, маленькие элементы становятся в начало массива очень медленно. Для дальнейшего исследования проблемы, Беси модифицировала свой код так, чтобы её код сканировал элементы вперёд а затем назад на каждой итерации главного цикла, так чтобы и большие элементы и маленькие элементы быстро достигали границ массива. Ниже представлен её код.

sorted = false
while (not sorted):
   sorted = true
   moo
   for i = 0 to N-2:
      if A[i+1] < A[i]:
         swap A[i], A[i+1]
   for i = N-2 downto 0:
      if A[i+1] < A[i]:
         swap A[i], A[i+1]
   for i = 0 to N-2:
      if A[i+1] < A[i]:
         sorted = false

По заданному входному массиву предскажите, сколько раз слово "moo" будет напечатано этим модифицированным кодом.

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

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)). Следующие \(N\) строк описывают \(A[0] \ldots A[N-1]\). Каждый элемент - целое число в интервале \(0 \ldots 10^9\). Не гарантируется, что все элементы различны.

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

Выведите сколько раз meltn напечатано слово "moo".

\(N\) коров (\(2 \leq N \leq 100\)) Фермера Джона, последовательно пронумерованных \(1 \ldots N\) разработали структуру утреннего доения. Она основывается на двух ключевых свойствах:

1. Некоторые коровы настаивают чтобы их доили раньше - в соответствии с их социальным статусом. Например, корова 3 имеет наивысший статус, корова 3 имеет средний статус, а корова 5 имеет низкий статус, то корову 3 нужно доить первой, затем корову 2 и затем корову 5.

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

По счастью, ФД всегда может подоить своих коров в порядке, удовлетворяющем всем условиям.

К несчастью, корова 1 заболела, поэтому ФД хочет подоить эту корову как можно раньше, чтобы раньше отпустить её в амбар отдыхать и выздоравливать. Помогите ФД определить самую раннюю позицию, в которой можно будет подоить корову 1.

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

Первая строка содержит \(N\), \(M\) (\(1 \leq M < N\)), \(K\) (\(1 \leq K < N\)), указывающая, что у ФД \(N\) коров, \(M\) из которых организованы в социальную иерархию, \(K\) из которых требуют, чтобы их подоили в определённой позиции порядка. Следующая строка содержит \(M\) различных целых чисел \(m_i\) (\(1 \leq m_i \leq N\)). Коровы, представленные в этой строке должны доиться в порядке, в котором они появились в этой строке. Следующие \(K\) строк содержат по по два целых числа \(c_i\) (\(1 \leq c_i \leq N\)) и \(p_i\) (\(1 \leq p_i \leq N\)), указывающих, что корова \(c_i\) должна быть подоена на позиции \(p_i\).

Гарантируется, что ФД может сконструировать порядок доения, удовлетворяющий всем условиям.

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

Выведите самую раннюю позицию, на которой можно подоить корову 1.

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

Чтобы обеспечить безопасность, он нанял \(N\) коров спасателями, каждый из которых работает в течение некоторого интервала времени в течение дня. Для простоты, бассейн открыт с момента времени \(t=0\) до момента времени \(t = 1,000,000,000\) каждый день. Поэтому каждый интервал может быть описан двумя целыми числами - временем начала и конца работы спасателя. Например, спасатель, начинающий в момент времени \(t = 4\) и завершающий в момент времени \(t = 7\), покрывает интервал в три единицы времени.

К несчастью, ФД нанял на одного спасателя больше чем может платить зарплату. При условии, что он должен уволить одного спасателя, какой максимальный интервал времени, будет покрыт оставшимися спасателями? Интервал времени покрыт, если присутствует хоть один спасатель в это время.

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

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

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

Выведите одно целое число - максимальное количество времени, которое останется покрытым, если ФД уволит одного спасателя.

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

Чтобы обеспечить безопасность, он нанял \(N\) коров спасателями, каждый из которых работает в течение некоторого интервала времени в течение дня. Для простоты, бассейн открыт с момента времени \(t=0\) до момента времени \(10^9\) каждый день. Поэтому каждый интервал может быть описан двумя целыми числами - временем начала и конца работы спасателя. Например, спасатель, начинающий в момент времени \(t = 4\) и завершающий в момент времени \(t = 7\), покрывает интервал в три единицы времени.

К несчастью, ФД нанял на \(K\) спасателей больше чем может платить зарплату. При условии, что он должен уволить ровно \(K\) спасателей, какой максимальный интервал времени, будет покрыт оставшимися спасателями? Интервал времени покрыт, если присутствует хоть один спасатель в это время.

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

Первая строка ввода содержит два числа \(N\) и \(K\) (\(K \leq N \leq 100,000, 1 \leq K \leq 100\)). Каждая из последующих \(N\) строк описывает интервалы работы спасателей двумя целыми числами в интервале \(0 \ldots 10^9\), задающими начало и конец работы спасателя. Все числа концы интервалов - различны. Сами интервалы могут перекрываться.

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

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

Фермер Джон решил сфотографировать всё свое стадо коров.

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

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

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

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

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

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

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

Чтобы обеспечить безопасность, он нанял \(N\) коров спасателями, каждый из которых работает в течение некоторого интервала времени в течение дня. Для простоты, бассейн открыт с момента времени \(t=0\) до момента времени \(t=1000\) каждый день. Поэтому каждый интервал может быть описан двумя целыми числами - временем начала и конца работы спасателя. Например, спасатель, начинающий в момент времени \(t = 4\) и завершающий в момент времени \(t = 7\), покрывает интервал в три единицы времени.

К несчастью, ФД нанял на одного спасателя больше чем может платить зарплату. При условии, что он должен уволить одного спасателя, какой максимальный интервал времени, будет покрыт оставшимися спасателями? Интервал времени покрыт, если присутствует хоть один спасатель в это время.

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

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

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

Выведите одно целое число - максимальное количество времени, которое останется покрытым, если ФД уволит одного спасателя.

Корова Беси из окна видит два рекламных щита про вкусную пищу для коров. К несчастью, недавно один из этих щитов обновили, и теперь он рекламирует "Газонокосилки фермера Ларри". Беси не нравится эта реклама.

К счастью, другой щит - с коровьей едой, расположен впереди щита с косилками, потенциально загораживая его.

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

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

Формат ввода (файл billboard.in):

Первая строка ввода содержит четыре разделённых пробелом целых числа: \(x_1\) \(y_1\) \(x_2\) \(y_2\), где \((x_1, y_1)\) и \((x_2, y_2)\) - это координаты левого нижнего и правого верхнего углов щита с рекламой косилок. Следующая строка содержит четыре числа, которые аналогично описывают щит с рекламой коровьей еды. Этот щит может перекрывать весь щит с косилками, или его часть, или вообще его не перекрывать. Все координаты в интервале от -1000 до 1000.

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

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

На ферме зима и значит много снега! Имеется \(N\) фрагментов на дорожке от фермы к амбару, последовательно пронумерованных \(1 \dots N\), и фрагмент \(i\) покрыт \(f_i\) футами снега.

Фермер Джон начинает с фрагмента \(1\) и должен достичь фрагмента \(N\), чтобы разбудить своих коров. Фрагмент \(1\) защищён крышей фермы, а фрагмент \(N\) - крышей амбара, поэтому на них нет снега. Но чтобы ходить по другим фрагментам ФД должен носить ботинки.

У ФД есть \(B\) пар ботинок, пронумерованных \(1 \dots B\). Некоторые из них тяжёлые, а некоторые полегче. В частности, пара \(i\) позволяет ФД ходить по снегу не более \(s_i\) футов глубины и позволяет ФД продвигаться на расстояние \(d_i\) вперёд на каждом шагу.

К несчастью, ботинки упакованы таким образом, что ФД может взять только самую верхнюю пару в любой момент времени. Поэтому в любой момент времени ФД может или положить наверх пару ботов (отказываясь от старых ботов) или снять верхнюю пару ботов, делая новую пару доступной).

ФД может менять ботинки только когда стоит на фрагменте. Если он стоит на фрагменте, то и те ботинки, которые он снимает, и те ботинки, которые он надевает, должны быть выше снега, как минимум на \(f\) футов. Промежуточные пары ботинок, которые он снимает из стопки ботинок не одевая, могут не удовлетворять этому ограничению.

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

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

Первая строка ввода содержит два разделённых пробелом целых числа \(N\) и \(B\) (\(2 \leq N,B \leq 250\)).

Вторая строка содержит \(N\) целых чисел, разделённых одиночными пробелами. \(i\)-ое число есть \(f_i\), глубина снега на фрагменте \(i\) (\(0 \leq f_i \leq 10^9\)). Гарантируется, что \(f_1 = f_N = 0\).

Следующие \(B\) строк содержат по два разделённых пробелом целых числа. Первое целое число на строке \(i+2\) есть \(s_i\) - максимальная глубина снега, в который может ступить пара \(i\). Второе целое число на строке \(i+2\) есть \(d_i\), максимальный размер шага для пары \(i\). Гарантируется, что \(0 \leq s_i \leq 10^9\) и \(1 \leq d_i \leq N-1\).

Ботинки описываются в порядке сверху-вниз, потому пара \(1\) - самая верхняя пара в пакете ботинок и т.д.

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

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

Фермер Джон и его персональный тренер Беси подымаются на гору Ванкувера. Эта гора может быть представлена как тропинка длиной \(L\) метров (\(1 \leq L \leq 10^6\)). ФД двигается по ней со скоростью \(r_F\) секунд в метр (\(1 \leq r_F \leq 10^6\)). Он не делает остановок во время движения.

Беси, однако разрешено делать остановки для отдыха и поедания травы. Но она может их делать не везде. Имеется \(N\) мест для остановок на тропинке (\(1 \leq N \leq 10^5\)); \(i\)-ая остановка находится на \(x_i\) метров от начала тропинки (\(0 < x_i < L\)), а трава на ней имеет вкусность \(c_i\) (\(1 \leq c_i \leq 10^6\)). Если Беси остановится в месте \(i\) на \(t\) секунд, она получит \(c_i \cdot t\) вкусности травы.

Беси двигается со скоростью \(r_B\) секунд за метр (\(1 \leq r_B \leq 10^6\)). Поскольку Беси моложе, \(r_B\) строго меньше \(r_F\).

Беси хочет максимизировать потребление вкусной травы. Но она беспокоится о ФД. Она думает, что если окажется позади ФД, у него пропадёт мотивация продолжать движение.

Помогите Беси найти максимальное суммарное значение съеденной вкусной травы которое она может получить, в уверенности, что ФД завершит подъём.

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

Первая строка ввода содержит четыре целых числа: \(L\), \(N\), \(r_F\), \(r_B\). Следующие \(N\) строк описывают остановки. Для каждого \(i\) от \(1\) до \(N\), \(i+1\)-ая строка содержит два целых числа \(x_i\) и \(c_i\), описывающих позицию \(i\)-ой остановки и вкусность травы здесь.

Гарантируется, что \(r_F > r_B\), и \(0 < x_1 < \dots < x_N < L \). Заметим, что \(r_F\) и \(r_B\) задаются в секундах на метр!

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

Одно целое число: максимальное количество единиц вкусности, которое Беси может получить.

Соскучившись от жизни на ферме, коровы ушли в бродячий цирк. И с ними готовится новое шоу.

Сцена для шоу представляет \(N\) платформ, размещённых по кругу. На каждой платформе от \(1\) до \(N\) коров формируют стек (корова становится на корову). По сигналу главного на манеже, все стеки параллельно "падают" по часовой стрелке так, что нижняя корова стека не движется, корова на ней движется на одну платформу по часовой стрелке, следующая корова - на две платформы и т.д. В результате получаются новые стеки коров.

Главный на манеже думает, что шоу будет лучше, если после того, как стеки упадут, новый стек на каждой платформе будет содержать такое же количество коров, что и исходный стек на манеже. Мы называем конфигурацию стеков на манеже "магической", если она удовлетворяет этому условию. Вычислите количество "магических" конфигураций. Поскольку это число может быть очень большое, выведите его остаток по модулю \(10^9 + 7\).

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

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

Ввод - олдно целое число, \(N\) (\(1 \leq N \leq 10^{12}\)).

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

Одно целое число - количество магических конфигураций по модулю \(10^9 + 7\).

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

Ферма Джона построена вдоль длинной прямой дороги, поэтому любое место фермы может быть описано его позицией на этой дороге (точка на числовой прямой). Телепортер описывается двумя числами \(x\) и \(y\), которые обозначают, что навоз из точки \(x\) может быть мгновенно телепортирован в точку \(y\) и наоборот.

ФД хочет транспортировать навоз из точки \(a\) в точку \(b\), и он может использовать телепортер в этом процессе (или не использовать, если он не поможет). Помогите ФД определить минимальное расстояние, которое он должен провести навоз на тракторе.

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

Первая и единственная строка ввода содержит четыре целых числа, разделённых одиночными пробелами \(a\) и \(b\), описывающие начальную и конечную точку, за которыми \(x\) и \(y\), описывающие телепортер. Все позиции - целые числа в интервале \(0 \ldots 100\), и они необязательно отличаются друг от друга.

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

Выведите одно целое число - минимальное расстояние, которое ФД должен провести навоз на тракторе.

Однажды утром Фермер Джон проснулся от звуков дробления древесины. Это коровы ломали амбар.

ФД рассердился. Он приделал к стене счётчик дней с последнего слома. Если слом случился утром, счётчик покажет 0. Если последний слом случился 3 дня назад, счётчик показывает 3. ФД тщательно записывал значение счётчика каждый день.

В конце года ФД решил действовать. Однако некоторые записи потерялись.

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

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

Первая строка содержит одно целое число \(N\) (\(1 \leq N \leq 100\)), обозначающее количество дней с того момента как ФД начал записи.

Вторая строка содержит \(N\) целых чисел, разделённых одиночными пробелами. \(i\)-ое число есть либо \(-1\), означающее что запись за этот день пропала, ил неотрицательное число \(a_i\) (не более \(100\)), означающая, что в день \(i\) значение счётчика было \(a_i\).

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

Если не существует последовательности событий, адекватной сохранившимся записям, выведите \(-1\). Иначе выведите два разделённых пробелом целых числа \(m\) и \(M\), где \(m\) - минимальное количество сломов, соответствующее последовательности событий лога, а \(M\) - максимальное.

На съезд прибыли коровы со всего мира.

На маленькой полянке есть очень редкая трава. Как результат, все \(N\) (\(1 \leq N \leq 10^5\)) коров, прибывших на конференцию, хотят попробовать эту траву. Они выстраиваются в огромную очередь, поскольку на полянке может быть в один момент времени только одна корова.

Фермер Джон знает время \(a_i\), в которое корова \(i\) планирует прибыть на это пастбище, а также количество времени \(t_i\), которое эта корова собирается провести на этом специальном пастбище. После того, как корова \(i\) начинает есть траву, она делает это всё время \(t_i\), в течение которого все вновь прибывшие коровы вынуждены ждать. Если несколько коров ждут, когда пастбище освободится, корова с более высоким старшинством будет следующей на поедание травы. С этой целью корова, которая прибывает прямо, когда другая корова завершает есть траву, называется "ожидающей". Аналогично, если некоторое количество коров прибывает в один и тот же момент времени, и никакая корова не ест, то корова с более высоким старшинством принимается за еду.

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

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

Первая строка ввода содержит \(N\). Каждая из последующих \(N\) строк указывает детали \(N\) коров в порядке старшинства (более старшая корова - первая). Каждая строка содержит \(a_i\) и \(t_i\) для одной коровы. \(t_i\) - положительные целые числа, не превышающие \(10^4\), \(a_i\) - положительные целые числа, не превышающие \(10^9\).

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

Выведите наибольшее потенциальное время ожидания среди всех коров.

\(N\) (\(1 \leq N \leq 10^5\)) Є®а®ў ”Ґа¬Ґа  „¦®­  (а §«Ёз­® Ё¤Ґ­вЁдЁжЁа®ў ­­ле \(1 \ldots N\)), ўлбв஥­л ў ап¤. ”„ «оЎЁв, Є®Ј¤  ҐЈ® Є®а®ўл ўлбв஥­л Ї® ў®§а бв ­Ёо, ­® ᥩз б нв® ­Ґ в Є. ”„ ўл§лў Ґв Є®а®ўл Ї® ®¤­®©. Љ®Ј¤  Є®а®ў  ўл§ў ­ , ®­  Їа®ўҐапҐв, Ґб«Ё Є®а®ў  ­ҐЇ®б।б⢥­­® бЇа ў  ®в ­Ґс Ё¬ҐҐв ¬Ґ­миЁ© ID, в®Ј¤  ®­Ё ¬Ґ­повбп ¬Ґбв ¬Ё. ‡ вҐ¬, Ґб«Ё Є®а®ў  ­ҐЇ®б।б⢥­­® б«Ґў  ®в ­Ґс Ё¬ҐҐв Ў®«миЁ© ID, ®­Ё ¬Ґ­повбп ¬Ґбв ¬Ё. Љ®а®ў  ®бв ­ ў«Ёў Ґвбп ў в®зЄҐ, Є®Ј¤  Є®а®ў  б«Ґў  ®в ­Ґс Ё¬ҐҐв ¬Ґ­миЁ© ­®¬Ґа,   Є®а®ў  бЇа ў  ®в ­Ґс Ё¬ҐҐв Ў®«миЁ© ­®¬Ґа.

”„ е®зҐв ўлЎа вм Ї®¤¬­®¦Ґбвў® Є®а®ў, Ё § вҐ¬ Їа®ЁвҐаЁа®ў вмбп Ї® н⮬㠯®¤¬­®¦Ґбвўг, ўл§лў п Є ¦¤го Ё§ нвЁе Є®а®ў Ї® ®зҐаҐ¤Ё (ў Ї®ап¤ЄҐ ў®§а бв ­Ёп Ёе ID), ®Їпвм Ё ®Їпвм ¤® вҐе Ї®а, Ї®Є  ўбҐ Є®а®ўл ­Ґ бв ­гв ®вб®авЁа®ў ­л. Ќ ЇаЁ¬Ґа, Ґб«Ё ®­ ўлЎҐаҐв Ї®¤¬­®¦Ґбвў® Є®а®ў б ID \(\{2, 4, 5\}\), в® ®­ б­ з «  ўл§®ўҐв Є®а®ўг \(2\), § вҐ¬ Є®а®ўг \(4\), § вҐ¬ Є®а®ўг \(5\). …б«Ё ўбҐ \(N\) Є®а®ў Ґйс ­Ґ ®вб®авЁа®ў ­л, ®­ Ўг¤Ґв ўл§лў вм нвЁе Є®а®ў ®Їпвм Ё ®Їпвм, бЄ®«мЄ® ­г¦­® а §.

”„ е®зҐв ¬Ё­Ё¬Ё§Ёа®ў вм а §¬Ґа нв®Ј® ¬­®¦Ґбвў . Ѓ®«ҐҐ в®Ј®, Ї®бЄ®«мЄг ®­ бзЁв Ґв зЁб«® \(K\) бз бв«Ёўл¬, Ї®¬®ЈЁвҐ Ґ¬г ®ЇаҐ¤Ґ«Ёвм \(K\)-®Ґ «ҐЄбЁЄ®Ја дЁзҐбЄЁ ¬Ё­Ё¬ «м­®Ґ Ї®¤¬­®¦Ґбвў® ¬Ё­Ё¬ «м­®Ј® а §¬Ґа  в Є®Ґ, зв® ўл§лў п Ї®б«Ґ¤®ў вҐ«м­® Є®а®ў нв®Ј® Ї®¤¬­®¦Ґбвў  ­г¦­®Ґ Є®«ЁзҐбвў® а § ¬®¦­® ®вб®авЁа®ў вм ўбҐе Є®а®ў.

Џ®¤¬­®¦Ґбвў® \(S\) Ё§ \(\{1,\dots,N\}\) ­ §лў Ґвбп «ҐЄбЁЄ®Ја дЁзҐбЄЁ ¬Ґ­миҐ, 祬 Ї®¤¬­®¦Ґбвў® \(T\) Ґб«Ё бЇЁб®Є н«Ґ¬Ґ­в®ў ў \(S\) (ў Ї®ап¤ЄҐ ў®§а бв ­Ёп) «ҐЄбЁЄ®Ја дЁзҐбЄЁ ¬Ґ­миҐ, зҐ бЇЁб®Є н«Ґ¬Ґ­в®ў Ё§ \(T\) (ў Ї®ап¤ЄҐ ў®§а бв ­Ёп). Ќ ЇаЁ¬Ґа, \(\{1, 3, 6\}\) «ҐЄбЁЄ®Ја дЁзҐбЄЁ ¬Ґ­миҐ, 祬 \(\{1, 4, 5\}\).

ЋжҐ­Ёў ­ЁҐ: ‚ вҐбв е ­  \(3/16\) Ў ««®ў \(N \leq 6\) and \(K = 1\). ‚ ¤®Ї®«­ЁвҐ«м­ле вҐбв е ­  \(5/16\) Ў ««®ў, \(K = 1\). ‚ ¤®Ї®«­ЁвҐ«м­ле вҐбв е ­  \(8/16\) Ў ««®ў, ­Ґв ¤агЈЁе ®Ја ­ЁзҐ­Ё©.

”ЋђЊЂ’ ‚‚Ћ„Ђ (д ©« itout.in):

ЏҐаў п бва®Є  ᮤҐа¦Ёв ®¤­® 楫®Ґ зЁб«®, \(N\). ‚в®а п бва®Є  ᮤҐа¦Ёв ®¤­® 楫®Ґ зЁб«®, \(K\) (\(1 \leq K \leq 10^{18}\)). ’аҐвмп бва®Є  ᮤҐа¦Ёв \(N\) а §¤Ґ«с­­ле ®¤Ё­®з­л¬Ё Їа®ЎҐ« ¬Ё 楫ле зЁбҐ«, ЇаҐ¤бв ў«пойЁе ID Є®а®ў б«Ґў  ­ Їа ў®.

ѓ а ­вЁагҐвбп, Ўг¤Ґв Є Є ¬Ё­Ё¬г¬ \(K\) Є®а४в­ле Ї®¤¬­®¦Ґбвў.

”ЋђЊЂ’ ‚›‚Ћ„Ђ (д ©« itout.out):

ЏҐаў п бва®Є  ўлў®¤  ᮤҐа¦Ёв а §¬Ґа ¬Ё­Ё¬ «м­®Ј® Ї®¤¬­®¦Ґбвў . Ћбв ўиЁҐбп бва®ЄЁ ¤®«¦­л ᮤҐа¦ вм ID Є®а®ў ў \(K\)-®¬ «ҐЄбЁЄ®Ја дЁзҐбЄЁ ¬Ё­Ё¬ «м­®¬ Ї®¤¬­®¦Ґб⢥ ¬Ё­Ё¬ «м­®Ј® а §¬Ґа ,Ї® ®¤­®¬г ID ў бва®ЄҐ, ў Ї®ап¤ЄҐ ў®§а бв ­Ёп.

Џђ€Њ…ђ ‚‚Ћ„Ђ:

4 1
4 2 1 3

Џђ€Њ…ђ ‚›‚Ћ„Ђ:

2
1
4

Њл ­ зЁ­ Ґ¬ б ¬ ббЁў  \(\mathtt{\:4\:\; 2\:\; 1\:\; 3\:}\). Џ®в®¬ ”„ ўл§лў Ґв Є®а®ўг б ID 1Ў Ї®«гзЁвбп ¬ ббЁў \(\mathtt{\:1\:\; 4\:\; 2\:\; 3\:}\). Џ®в®¬ ”„ ўл§лў Ґв Є®а®ўг б ID 4 Ї®«гзЁвбп ¬ ббЁў \(\mathtt{\:1\:\; 2\:\; 3\:\; 4\:}\). ‚ нв®© в®зЄҐ ¬ ббЁў ®вб®авЁа®ў ­.

Problem credits: Spencer Compton

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