Алгоритмы

2 310 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: ✓ успешные, ✗ неуспешные.
Exercise#90114
Фермер Джон проводит утреннюю зарядку с коровами.

\(N\) коров (\(1\le N\le 10^4\)) стоят в ряд. \(i\)-ая корова слева имеет метку \(i\) для каждого \(1\le i\le N\). ФД говорит коровам повторять следующие действия до тех пор, пока коровы не вернуться к тому же порядку, с которого начинали:

  • По заданной перестановке \(A\) длины \(N\), коровы изменяют их порядок так, что \(i\)-ая корова слева до изменения становится \(A_i\) коровой слева после изменения

Например, если \(A=(1,2,3,4,5)\) тогда коровы выполнят один шаг. Если \(A=(2,3,1,5,4)\), тогда коровы выполнят 6 шагов. Порядок коров слева направо после каждого из шагов будет таким:

  • 0 шаг: \((1,2,3,4,5)\)
  • 1 шаг: \((3,1,2,5,4)\)
  • 2 шаг: \((2,3,1,4,5)\)
  • 3 шаг: \((1,2,3,5,4)\)
  • 4 шаг: \((3,1,2,4,5)\)
  • 5 шаг: \((2,3,1,5,4)\)
  • 6 шаг: \((1,2,3,4,5)\)

Определите сумму всех положительных целых чисел \(K\) таких, что существует перестановка длины \(N\), которая требует от коров выполнить ровно \(K\) шагов.

Поскольку это число может быть очень большим, выведите ответ по модулю \(M\) (\(10^8\le M\le 10^9+7\), \(M\) - простое).

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

Первая строка содержит \(N\) и \(M\).

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

Одно целое число

Беси и её маленькая сестра Эльза собирают ягоды в саду Фермера Джона. В саду ФД имеется ровно \(N\) деревьев с ягодами (\(1\le N\le 1000\)); На дереве \(i\) висит ровно \(B_i\) ягод (\(1\le B_i\le 1000\)). У Беси есть ровно \(K\) корзин (\(1 \le K \le 1000\), \(K\) - чётное). Каждая корзина может содержать сколько Беси хочет ягод с одного дерева, но не может содержать ягоды с двух различных деревьев (поскольку вкусы ягод отрицательно влияют друг на друга). Корзины могут оставаться пустыми.

Беси хочет максимизировать количество ягод, которое она соберёт. Однако ФД хочет, чтоб Беси поделилась ягодами со своей младшей сестрой, поэтому Беси должна отдать Эльзе \(K/2\) корзин с наибольшим количеством ягод. Это значит, что у Эльзы может даже оказаться больше ягод чем у Беси.

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

SCORING:

  • Тесты 1-4 удовлетворяют условию \(K\le 10.\)
  • Тесты 5-11 не имеют дополнительных ограничений.

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

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

Вторая строка содержит \(N\) разделённых одиночными пробелами целых чисел \(B_1,B_2,\ldots,B_N.\)

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

Одна строка с ответом.

Беси работает над эссе. Поскольку пишет она некрасиво, она решила набрать эссе в текстовом процессоре.

Эссе содержит \(N\) слов (\(1\le N\le 100\)), разделённых пробелами. Каждое слово имеет длину от 1 до 15 символов включительно, и состоит только из больших или маленьких латинских букв. В соответствии с правилами, эссе должно быть отформатировано специфическим образом: каждая строк должна содержать не более \(K\) (\(1\le K\le 80\)) символов, не считая пробелы. К счастью, текстовый процессор Беси может выполнять это требование при использовании следующей стратегии:

  • Если Беси пишет слово которое может поместится на текущей строке, оно помещается в эту строку.
  • Иначе надо переместить слово в следующую строку и продолжить пополнение этой следующей строки.

Конечно, последовательные слова в одной строке должны быть разделены ровно одним пробелом. Не должно быть пробелов в конце любой строки.

К несчастью, текстовый процессор Беси сломался, помогите ей отформатировать её эссе в соответствии с вышеописанными правилами.

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

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

Следующая строка содержит \(N\) слов, разделённых одиночными пробелами. Никакое слово не будет длиннее, чем \(K\) символов - максимальное количество символов в одной строке.

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

Отформатированное корректно эссе Беси.

Race#90103
Беси участвует в гонке длиной \(K\) (\(1\le K\le 10^9\)) метров. Она начинает бежать со скоростью 0 метров в секунду. Каждую секунду она может увеличить свою скорость на 1 метр в секунду, оставить скорость неизменной или уменьшить скорость на 1 метр в секунду. Например, в первую секунду она может увеличить скорость на 1 метр в секунду и пробежать за эту секунду 1 метр, или оставить скорость - метров в секунду и пробежать 0 метров. Беси не может сделать свою скорость меньше нуля.

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

ОЦЕНИВАНИЕ:

  • Тесты 2-4 удовлетворяют \(N=X=1.\)
  • тесты 5-10 не имеют дополнительных ограничений.

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

Первая строка содержит два целых числа \(K\) и \(N\).

Каждая из следующих \(N\) строк содержит одно целое число \(X\).

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

Выведите \(N\) строк, каждая из них должна содержать одно целое число - минимальное количество времени, которое требуется Беси, чтобы пробежать \(K\) метров и финишировать со скоростью меньше либо равной \(X\).

Фермер Джон выстроил \(N\) своих коров (\(2\le N\le 10^3\)), пронумерованных \(1\ldots N\), для фотоснимка. Изначально ФД планировал, что \(i\)-ая корова слева будет корова с номером \(a_i,\) и выписал перестановку \(a_1,a_2,\ldots,a_N\) на листке бумаги. К несчастью этот листок украл фермер Нхож.

Однако, ФД сможет восстановить перестановку, которую он изначально выписал. Перед тем, как листок с перестановкой был украден, Беси выписала последовательность \(b_1,b_2,\ldots,b_{N-1}\) такую, что \(b_i=a_i+a_{i+1}\) для всех \(1\le i<N.\)

Основываясь на информации от Беси, помогите ФД восстановить "лексикографически минимальную" перестановку \(a\), которая может произвести \(b\). Перестановка \(x\) лексикографически меньше перестановки \(y\), если для некоторого \(j\), \(x_i=y_i\) для всех \(i<j\) и \(x_j<y_j\) (другими словами, две перестановки идентичны до определённой точки, в которой \(x\) меньше чем \(y\)). Гарантируется, что существует как минимум одна такая перестановка \(a\)

ОЦЕНИВАНИЕ:

  • Тесты 2-4 удовлетворяют \(N\le 8.\)
  • Тесты 5-10 не имеют дополнительных ограничений.

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

Первая строка содержит одно целое число \(N.\)

Вторая строка содержит \(N-1\) разделённых одиночными пробелами целых чисел \(b_1,b_2,\ldots,b_{N-1}.\)

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

Одна строка с \(N\) разделёнными одиночными пробелами целых чисел \(a_1,a_2,\ldots,a_{N}.\)

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

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

Помогите ФД определить максимальное положительное целое \(K\) такое, что дороги могут быть разделены на пути длины не менее \(K\).

ОЦЕНИВАНИЕ:

  • В тестах 2-4 дерево формирует звезду; не более чем одна вершина имеет степень больше чем 2.
  • В тестах 5-8 \(N\le 10^3\).
  • В тестах 9-15 нет дополнительных ограничений.

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

Первая строка содержит \(N\).

Каждая из следующих \(N-1\) строк содержит по два целых числа \(a\) и \(b\), описывающих ребро между вершинами \(a\) и \(b\). Оба числа \(a\) и \(b\) в интервале \(1 \ldots N\).

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

Выведите \(K\).

Беси дали \(N\) отрезков (\(1\le N\le 10^5\))и одну прямую. \(i\)-ый отрезок содержит все вещественные числа \(x\) такие, что \(l_i\le x\le r_i\).

Определите объединение отрезов, которое будет множеством всех \(x\) которые содержатся внутри хотя бы одного отрезка. также определите сложность множества отрезков как количество связанных отрезков, представленных в этом объединении.

Беси хочет вычислить сумму сложностей во всем \(2^N\) подмножествам заданного множества из \(N\) отрезков по модулю \(10^9+7\).

Помогите Беси!

ОЦЕНИВАНИЕ:

  • В тестах 2-3 \(N\le 16\).
  • В тестах 4-7 \(N\le 1000\).
  • В тестах 8-12 нет дополнительных ограничений.

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

Первая строка содержит \(N\).

Каждая из следующих \(N\) строк содержит по два целых числа \(l_i\) и \(r_i\). Гарантируется, что \(l_i< r_i\) и все \(l_i,r_i\) различные целые числа в интервале \(1 \ldots 2N.\)

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

Выведите ответ по модулю \(10^9+7\).

Ферма Фермера Джона состоит из \(N\) пастбищ (\(1 \leq N \leq 10^5\)) соединённых \(N-1\) дорогами, так, что любое пастбище достижимо из любого пастбища. То есть ферма представляет собой дерево.

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

Более точно для каждого \(1 \leq K \leq N-1\), помогите ФД определить, могут ли дороги быть распределены на пути длиной ровно \(K\).

ОЦЕНИВАНИЕ:

  • В тестах 2-4 дерево образовывает звезду; не более одной вершины имеет степень более двух.
  • В тестах 5-8 \(N\le 10^3\).
  • В тестах 9-15 нет дополнительных ограничений.

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

Первая строка содержит целое число \(N\).

Каждая из следующих \(N-1\) строк содержит целые числа \(a\) и \(b\), описывающие ребро между вершинами \(a\) и \(b\). Все \(a\) и \(b\) в интервале \(1 \ldots N\).

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

Выведите битовую строку длины \(N-1.\) Для каждого \(1\le K\le N-1,\) \(K\)-ый бит строки слева равный 1 означает, что возможно разбиение ребер на пути длины ровно \(K\) и равный \(0\) в противном случае.

Фермер Джон занялся редактированием геномов. Как известно, геном может быть представлен строкой состоящей из символов 'A', 'C', 'G', 'T'. Максимальная длина строки генома, рассматриваемая ФД есть 10^5.

ФД начинает с одного генома и редактирует его, выполняя следующие шаги:

  1. Разделяет геном между каждыми двумя последовательными равными символами.
  2. Реверсирует каждую из полученных подстрок.
  3. Конкатенирует реверсированные подстроки в том же порядке.

Например, если ФД начинает с генома AGGCTTT, то он выполнит следующие шаги:

  1. Разделит между последовательными равными символами G и T получит AG | GCT | T | T.
  2. Реверсирует каждую подстроку, получит GA | TCG | T | T.
  3. Конкатенирует реверсированные подстроки, получит GATCGTT.

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

По заданной последовательности отредактированного генома помогите ФД определить количество возможностей для стартового генома по модулю \(10^9+7\).

ФОРМАТ ВВОДА: (с клавиатуры / stdin):

Непустая строка символов , где каждый символ один из A, G, C, T, ?.

ФОРМАТ ВЫВОДА: (на экран / stdout):

Количество возможных оригинальных геномов по модулю \(10^9+7\).

Left Out#90083
Фермер Джон снова фотографирует своих коров.

На этот раз он делает фото с воздуха. Он хочет, чтоб все его коровы смотрели в одну сторону. Сейчас коровы организованы в решётку \(N \times N\), (\(2 \leq N \leq 1000\)) внутри квадратного пастбища, как показано ниже:

RLR
RRL
LLR

Здесь 'R' означает, что корова смотри вправо, 'L' означает, что корова смотрит влево. Поскольку коровы находятся в стаде, ФД не может говорить повернуться одной корове. Всё что он может - это повернуть целую строку или целый столбец повернув коров 'L' на 'R' или 'R' на 'L' внутри этой строки/столбца. ФД может поворачивать столбцы и строки сколько угодно раз, в том числе и поворачивать один тот же столбец или строку более чем один раз.

Как оказалось, ФД не может перевернуть всех коров в одном направлении, Но может всех коров кроме одной - определите эту корову.

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

Первая строка содержит число \(N\). Следующие \(N\) строк описывают строки \(1 \ldots N\) решётки коров, каждая содержит строку длины \(N\).

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

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

У Фермера Джона \(N\) коров, последовательно пронумерованных d \(1 \ldots N\) (\(2 \leq N \leq 10^5\)). Они организованы в сложную социальную структуру "moo networks" - маленькие группы коров взаимодействуют внутри группы, но не с другими группами.

Каждая корова расположена в точке \((x,y)\) на двумерной карте фермы. И нам известны \(M\) (\((1 \leq M < 10^5)\)) пар коров, принадлежащих к одной и той же группе.

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

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

Первая строка ввода содержит \(N\) и \(M\). Каждая из следующих \(N\) строк содержит \(x\) и \(y\) - координаты коров (неотрицательные целые числа не более \(10^8\)). Каждая из следующих \(M\) строк содержит два целых числа \(a\) и \(b\), описывающих принадлежность коров с номерами \(a\) и \(b\) к одной группе. Каждая корова присутствует как минимум в одной из таких пар. Никакие пары во вводе не повторяются.

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

Выведите минимальный периметр, удовлетворяющий ограничениям ФД.

Valleys#90080

Беси рассматривает решётку \(N \times N\) ячеек, где каждая ячейка имеет высоту. Каждая ячейка вне этой решётки считается имеющей бесконечную высоту.

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

Более формально:

  • Множество ячеек называется "смежными с торцевой", если можно достичь любую ячейку этого множества из любой двигаясь вправо, влево, вверх, вниз.
  • Множество ячеек называется "точечно-смежным" если можно из любой ячейки множества достичь любой другой ячейки множества, двигаясь, влево, вправо, вверх, вниз или по диагонали.
  • Регион - это непустое множество ячеек "смежных с торцевой".
  • Регион называется дырявым, если дополнение региона (которое включает бесконечные ячейки вне решётки) не является "точечно-смежным".
  • Граница региона - это множество ячеек, ортогонально соседних (вверх, вниз, влево, вправо) к некоторой ячейке региона, но не принадлежащих региону.
  • "Долина" это любой недырявый регион, в котором каждая ячейка имеет высоту ниже чем каждая ячейка границы долины.

Цель Беси - определить сумму размеров всех долин.

Примеры

Это регион:

oo.
ooo
..o

Это не регион (средняя ячейка и нижняя правая ячейка не являются "смежными с торцевой"):

oo.
oo.
..o

Это регион без дыр:

ooo
o..
o..

Это дырявый регион (одна ячейка внутри):

ooo
o.o
ooo

Это другой недырявый регион (центральная ячейка является точечно-смежной с ячейкой в правом нижнем углу):

ooo
o.o
oo.

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

Первая строка содержит целое число \(N\), где \(1 \le N \le 750\).

Каждая из следующих \(N\) строк содержит \(N\) целых чисел - высоты ячеек решётки. Каждая высота \(h\) удовлетворяет \(1 \le h \le 10^6\). Все высоты различны.

в 19% тестов гарантируется \(N \leq 100\).

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

Выведите одно целое число, сумму размеров всех долин.

Фермер Джон планирует построить \(N\) (\(1 \leq N \leq 10^5\)) ферм, которые будут соединены \(N-1\) дорожками, образовывая дерево. Обычно когда на одной из ферм возникает проблема, он получает информацию в виде " имеется проблема на одной из ферм на пути от фермы \(A\) к ферме \(B\).

ФД рассматривает ферму как точку на 2-мерной плоскости. Он хотел бы получать информацию о проблемах на одной из ферм в прямоугольных координатах. А именно он хочет получать информацию в виде не более двух прямоугольников, параллельных осям координат, чьё пересечение пустое, а объединение содержит все фермы на пути от \(A\) к \(B\). Вы должны помочь ФД определить, как расположить его фермы так, чтобы условие выполнялось.

Это интерактивная задача. Вы не должны использовать ввод-вывод. Решения, использующие ввод-вывод будут дисквалифицированы. Но Вам разрешено использовать глобальные и статические переменные. Вы должны разработать следующие функции:

  • void addRoad(int A, int B): обрабатывает дорогу между фермами \(A\) и \(B\) (\(0 \le A, B \le N - 1\)).
  • void buildFarms(): Определяет, где ФД должен построить все свои фермы.
  • void notifyFJ(int A, int B): сообщает ФД один или два прямоугольника, которые удовлетворяют вышеописанным условиям

Ваша реализация указанных выше функций должна вызывать следующие функции, перечисленные ниже. Вы можете полагать, что \(\texttt{notifyFJ}\) будет вызвана \(Q\) раз.

  • int getN(): получить значение \(N\).
  • int getQ(): получить значение \(Q\).
  • void setFarmLocation(int ID, int X, int Y): определяет, что ФД должен построить ферму с номером \(ID\) (\(0 \le ID \le N-1\)) в позиции \((X,Y)\), где \((1 \le X, Y \le 10^5 )\). Она будет вызвана из \(\texttt{buildFarms}\).
  • void addBox(int X1, int Y1, int X2, int Y2): добавляет прямоугольник для сообщения ФД, \((1 \le X1 \le X2 \le 10^5 )\) и \((1 \le Y1 \le Y2 \le 10^5 )\). Вызывается только из \(\texttt{notifyFJ}\).

Интерактивный протокол работает следующим образом: Сначала \(\texttt{addRoad}\) вызывается \(N-1\) раз, чтобы информировать Вашу программу о системе дорог. Затем, будет вызвана \(\texttt{buildFarms}\) и Вы должны будете определить, где ФД должен построить каждую свою ферму соотвественно. А потом будут \(Q\) вызовов \(\texttt{notifyFJ}\) где Вы должны будете сделать один или два вызова \(\texttt{addBox}\) для нотификации ФД.

Гарантируется, что всегда существует корректный способ нотифицировать ФД одним или двумя прямоугольниками. Ограничение по памяти для данной задачи 512 Мбт (в отличие от обычных 256).

Для C++ решений, используйте такой template:

#include "grader.h"

void addRoad(int a, int b){
	// Fill in code here
}

void buildFarms(){
	// Fill in code here
}

void notifyFJ(int a, int b){
	// Fill in code here
}

Для Java решений, исполозуйте такой template:

import java.io.IOException;
// If you find it necessary, you may import other standard libraries here.
public class boxes extends Grader {

  	// Copy this exactly:
        
Override
  	public static void main(String args[]) throws IOException { new boxes().run(); }

        
Override
  	public void addRoad(int a, int b) {
      // Fill in code here
  	}
        
Override
  	public void buildFarms(){
      // Fill in code here
	  }
  	
Override
  	public void notifyFJ(int a, int b){
      // Fill in code here
  	}
}
}

Пример взаимодействия

Grader calls \(\texttt{addRoad(0,1)}\)

Grader calls \(\texttt{addRoad(1,2)}\)

Grader calls \(\texttt{buildFarms()}\)

Solution calls \(\texttt{setFarmLocation(0,1,1)}\)

Solution calls \(\texttt{setFarmLocation(1,1,2)}\)

Solution calls \(\texttt{setFarmLocation(2,2,2)}\)

Solution ends \(\texttt{buildFarms()}\)

Grader calls \(\texttt{notifyFJ(0,0)}\)

Solution calls \(\texttt{addBox(1,1,1,1)}\)

Solution ends \(\texttt{notifyFJ(0,0)}\)

Grader calls \(\texttt{notifyFJ(0,2)}\)

Solution calls \(\texttt{addBox(1,1,1,2)}\)

Solution calls \(\texttt{addBox(2,2,2,2)}\)

Solution ends \(\texttt{notifyFJ(0,2)}\)

Грайдер завершает свою работу, решение прошло тест.

Автор: Spencer Compton

Беси с друзьями попала в ловушку и разрабатывает план побега. Ловушка состоит из \(NK\) ячеек, в виде прямоугольной решётки \(N \times K\). В каждой ячейке имеется проход между горизонтально и вертикально соседними ячейками. В каждой ячейке находится ровно одна корова.

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

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

Поскольку это число может быть очень большим, выводите его остаток по модулю \(10^9 + 7\).

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

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

Каждая из последующих \(N\) строк содержит \(K-1\) целое число - стоимости разблокирования каждого прохода в горизонтальном направлении.

Каждая из последующих \(K\) строк содержит \(N-1\) целое число - стоимости разблокирования каждого прохода в вертикальном направлении.

Все стоимости от \(1\) до \(10^9\) включительно.

В 20% тестов гарантируется, что \(N \leq 500\) и все веса от \(1\) до \(5\) включительно.

В других 20% тестов гарантируется \(N \leq 5000\).

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

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

Беси и Эльза играют на битовом массиве \(A\) длиной \(2N\) (\(1 \leq N \leq 10^5\)). Счёт Беси - это количество инверсий в первой половине массива \(A\), а счёт Эльзы - количество инверсий во второй половине массива \(A\). Инверсия - это такая пара \(A[i]=1\) и \(A[j]=0\), что \(i<j\). Например, если массив состоит из блока 0, за которым следует блок 1, то инверсий нет. А массив в котором за блоком из \(X\) единиц следует блок из \(Y\) нулей, то имеется \(XY\) инверсий.

Фермер Джон остановился около игры и хочет узнать минимальное количество обменов между соседними элементами, которые нужно совершить, чтобы игра получила ничейный счёт. ФОРМАТ ВВОДА (файл balance.in): Первая строка ввода содержит \(N\), следующая строка содержит \(2N\) целых чисел каждое из которых равно 0 или 1. ФОРМАТ ВЫВОДА (файл balance.out): Выведите количество соседних обменов, которые нужно сделать, чтобы игра получила ничейный счёт.

На ферме пожар и коровы должны спасаться.

Ферма описывается решёткой \(10 \times 10\) символов:

..........
..........
..........
..B.......
..........
.....R....
..........
..........
.....L....
..........

Символ 'B' представляет амбар, который горит. Символ 'L' представляет озеро, символ 'R' представляет огромную скалу.

Коровы хотят сформировать "ведерную бригаду", разместившись вдоль пути между озером и амбаром так, чтобы они могли передавать друг другу воду для тушения пожара. Ведро может передаваться между коровами, если они являются непосредственными соседями в направлении "север", "юг", "запад", "восток". Аналогично корова может набирать воду из озера, если она аналогично соседствует с ним. Наконец корова может поливать амбар из ведра, только если она аналогично непосредственно соседствует с ним.

Помогите определить минимальное количество квадратов '.', которые должны быть заняты коровами, чтобы сформировать успешную "ведерную бригаду".

Корова не может находится в квадрате, содержащем скалу, амбар или озеро. Гарантируется, что они не будут соседними друг другу.

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

Входной файл содержит 10 строк, каждая по 10 символов, описывающих план фермы.

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

Выведите одно целое число - минимальное количество коров, требуемых для того, чтобы сформировать "ведерную бригаду".

Со своего пастбища Беси имеет прекрасный вид на горный горизонт. Имеется \(N\) гор (\(1 \leq N \leq 10^5\)). Каждая гора это треугольник, основание которого лежит на оси \(x\). Обе стороны горы наклонены под углом 45 градусов, поэтому пик горы - угол в 90 градусов. Гора \(i\) поэтому задаётся координатами \((x_i, y_i)\) её пика. Никакие две горы не имеют одно и то же расположение пика.

Беси хочет посчитать все горы, но, поскольку все они примерно одного цвета, она не может увидеть гору, если её пик лежит на границе или внутри другой горы.

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

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

Первая строка ввода содержит \(N\). Каждая из оставшихся \(N\) строк содержит \(x_i\) (\(0 \leq x_i \leq 10^9\)) и \(y_i\) (\(1 \leq y_i \leq 10^9\)) описывающих пики гор.

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

Выведите минимальное количество гор, которые Беси может различить.

Бовинополис состоит из ряда из \(N\) пастбищ (\(1 \leq N \leq 3 \cdot 10^5\)), Каждое из которых содержит одну корову типа Holstein или Guernsey.

Правительство Бовинополиса хочет разделить его на некоторое количество непрерывных районов так, чтобы каждый район содержал не более \(K\) пастбищ (\(1 \leq K \leq N\)), и каждое пастбище содержится ровно в одном районе. Поскольку сейчас правительство контролируется Holstein-ами, они хотят найти такой способ разделения на районы, который минимизирует количество районов, в которых коров Guernsey будет больше, чем коров Holstein или столько же сколько Holstein.

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

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

Первая строка ввода содержит два разделённых пробелом целых числа \(N\) и \(K\). Вторая строка содержит строку символов длиной \(N\). Каждый символ 'H' или 'G', означающих Holstein или Guernsey, соответственно.

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

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

Ферма состоит из \(N\) полей (\(1 \leq N \leq 2 \cdot 10^5\)), последовательно пронумерованных \(1 \ldots N\), и удобно соединённых множеством из \(M\) двунаправленных тропинок (\(1 \leq M \leq 2 \cdot 10^5\)). Будучи "существами привычки" коровы используют одно множество из \(N-1\) тропинок для всех своих ежедневных перемещений между полями. Они называют эти тропинки "стандартными" тропинками. Возможно добраться от любого поля до любого другого поля, используя только стандартные тропинки.

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

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

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

Первая строка ввода содержит \(N\) и \(M\). Каждая из следующих \(M\) строк содержит два целых числа \(a_i\) и \(b_i\) описывающих конечные точки тропинки. Первые N-1 из них - стандартные тропинки.

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

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

Беси хочет написать собственную поэму.

Беси знает \(N\) (\(1 \leq N \leq 5000\)) слов и хочет организовать их в поэму. Она определила длину в слогах каждого слова, кроме того она распределила их в "классы рифм". Каждое слово рифмуется только с другими словами из этого же класса рифм.

Каждая из поэм Беси включает \(M\) строк (\(1 \leq M \leq 10^5\)) и каждая строка должна состоять из \(K\) (\(1 \leq K \leq 5000\)) слогов. Более того, поэм Беси должна соответствовать специфической схеме рифм.

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

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

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

Каждая из следующих \(N\) строк содержит два числа \(s_i\) (\(1 \leq s_i \leq K\)) и \(c_i\) (\(1 \leq c_i \leq N\)). Они обозначают, что Беси знает слово с длиной (в слогах) \(s_i\) и класса рифмы \(c_i\).

Последние \(M\) строк описывают желаемую схему рифмы Беси и каждая содержит одну большую букву \(e_i\). Все строки соответствующие \(e_i\) должны заканчиваться словами одного и того же кдасса рифм. Строки с различными значениями \(e_i\) не обязательно заканчиваются словами с различными классами рифм.

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

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

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