дп

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

Ёлочная гирлянда состоит из n лампочек, пронумерованных от 1 до n. Каждая лампочка либо горит (обозначим «1»), либо не горит («0»). Текущее состояние гирлянды задано строкой a.

Монтажник Егор хочет, чтобы гирлянда выглядела по-праздничному — в виде строки b (тоже из нулей и единиц, той же длины n). Менять строку b нельзя — это «образец».

С гирляндой a Егор может выполнять две операции:

  • Переключить одну лампочку. Выбрать позицию i (1 ≤ i ≤ n) и поменять её состояние (0 → 1 или 1 → 0). Стоимость такой операции — 1 рубль.
  • Поменять местами две лампочки. Выбрать две позиции i и j (1 ≤ i, j ≤ n) и поменять состояния этих лампочек местами. Стоимость такой операции — |i - j| рублей, то есть расстояние между позициями.

Помогите Егору найти минимальную суммарную стоимость, с которой можно превратить гирлянду a в гирлянду b.
 

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

В первой строке — целое число n (1 ≤ n ≤ 106) — количество лампочек в гирлянде.

Во второй строке — строка a длины n, состоящая только из символов «0» и «1», — текущее состояние гирлянды.

В третьей строке — строка b длины n, состоящая только из символов «0» и «1», — желаемое состояние гирлянды.
 

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

Одно целое число — минимальная суммарная стоимость, которую нужно заплатить, чтобы превратить a в b.

Штурманский журнал «Нулевого указателя» содержит n записей о курсах корабля — каждая запись это целое число (градусы поворота за день). Капитан Архипов считает, что самый красивый маршрут — это когда курсы идут строго последовательными целыми числами: x, x+1, x+2, … Он называет это Великой Цепью.

Найдите наидлиннейшую подпоследовательность записей (не обязательно подряд), которая образует Великую Цепь. Выведите её длину и номера записей в журнале. Если существует несколько подпоследовательностей максимальной длины — можно вывести любую.

«И не вздумай вывести только длину», — добавил Архипов, не отрываясь от чая.


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

Первая строка: n (1 ≤ n ≤ 200 000).

Вторая строка: n чисел ai (1 ≤ ai ≤ 109) — курсы по дням.


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

Первая строка: длина наибольшей Великой Цепи.

Вторая строка: номера записей в порядке возрастания (нумерация с 1).

 

Примечание: Журнал: 5 3 1 2 4 1 3 (7 записей).

Записи №3, 4, 5, 7 имеют курсы 1, 2, 3, 4 — они идут подряд с шагом 1, образуя Великую Цепь длиной 4.

Например, записи №1, 2, 7 дают курсы 5, 3, 3 — не подходят (не последовательные).

Записи №6, 4, 5 дают 1, 2, 4 — тоже не подходят (пропущено 3).

Если существует несколько подпоследовательностей максимальной длины — можно вывести любую.

✓ 2✗ 111 700труднаяВойти и решать

Шкипер Баг ужасно страдает от морской болезни. Единственное спасение — зелье «Штиль», которое продаётся в лавках на островах архипелага. На n островах цены разные: в i-м порту бутылка стоит xi дублонов.

Каждый раз, когда «Нулевой указатель» заходит в порт, у Шкипера Бага с собой разная сумма — зависит от того, не украл ли корабельный кот монеты из кармана. Всего таких заходов будет q. Для каждого захода Шкипер Баг хочет заранее знать: в скольких портах архипелага он смог бы купить зелье, имея столько дублонов?

Формат входных данных
Первая строка: n (1≤n≤100 000) — количество портов.
Вторая строка: n чисел  xi​ (1≤xi≤100 000) — цены на зелье.
Третья строка: q (1≤q≤100 000) — количество заходов в порт.
Следующие q строк: число mi​ (1≤mi≤109) — дублоны Шкипера Бага при i-м заходе.

Формат выходных данных
q чисел — для каждого захода количество портов, где хватит денег.


Примечание: 
При 1 дублоне ни одна лавка недоступна. При 8 — можно купить в 4 лавках (цены 2, 3, 4, 7). При 3 — только одна лавка (цена 2). При 100 дублонах — все пять.

Вы играете в игру «Бинарная Сила» и управляете персонажем, у которого есть 𝑑 = 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

Формат выходных данных
Для каждого набора выходных данных в отдельной строке выведите единственное число – максимальное количество монет, которые можно заработать.
 
Фермер Джон продолжает исследование перехода коровами дороги на его ферме, описанной в предыдущей задаче. Он выяснил, что взаимодействие между некоторыми парами пород приемлемо, если они дружественные, а это характеризуется номерами пород следующим образом: Породы \(a\) и \(b\) дружественные, если \(|a - b| \leq 4\), и недружественные в противном случае. Коровы могут наведываться в поля коров других пород, только если они дружественные.

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

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

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

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

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

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

ФД хочет разместить ровно \(r_i\) коров в комнате \(i\) (\(1 \leq r_i \leq 1,000,000\)). Он планирует открыть \(k\) внешних дверей (\(1 \leq k \leq 7\)), через которые коровы будут входить в амбар. Каждая корова затем идёт по часовой стрелке, пока не добредёт до нужной комнаты. ФД хочет открыть двери так, чтобы все коровы вместе прошли как можно меньшее расстояние. Коровы предварительно могут собраться как им выгоднее перед этими незакрытыми дверями (эти перемещения не входят в общее расстояние, учитываемое в задаче). Определите минимальное суммарное расстояние, которое придётся пройти коровам, если ФД наилучшим образом выберет какие \(k\) открыть.

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

Первая строка ввода содержит \(n\) и \(k\). Последующие \(n\) строк содержат \(r_1 \ldots r_n\).

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

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

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

ФД хочет разместить ровно \(r_i\) коров в комнате \(i\) (\(1 \leq r_i \leq 1,000,000\)). Он планирует открыть \(k\) внешних дверей (\(1 \leq k \leq 7\)), через которые коровы будут входить в амбар. Каждая корова затем идёт по часовой стрелке, пока не добредёт до нужной комнаты. ФД хочет открыть двери так, чтобы все коровы вместе прошли как можно меньшее расстояние. Коровы предварительно могут собраться как им выгоднее перед этими незакрытыми дверями (эти перемещения не входят в общее расстояние, учитываемое в задаче). Определите минимальное суммарное расстояние, которое придётся пройти коровам, если ФД наилучшим образом выберет какие \(k\) открыть.

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

Первая строка ввода содержит \(n\) и \(k\). Последующие \(n\) строк содержат \(r_1 \ldots r_n\).

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

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

Фермер Джон придумал игру для своих коров

Она играется на решётке R*C (2 <= R <= 750, 2 <= C <= 750), где каждый квадрат помечен целым числом от 1 до K (1 <= K <= R*C). Коровы выполняют последовательность прыжков, начиная в левом верхнем квадрате и заканчивая в правом нижнем квадрате и прыжок является корректным если и только если:

1) Вы прыгаете на квадрат c другим числом

2) Квадрат, куда Вы прыгаете, как минимум на одну строку ниже квадрата, в котором Вы сейчас стоите

3) Квадрат, в который Вы прыгаете как минимум на одну колонку правее квадрата, в котором Вы сейчас стоите

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

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

Первая строка ввода содержит целые числа R, C, K. Каждая из следующих R строк содержит C целых чисел, каждое в интервале 1..K.

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

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

Беси хочет смотреть кино L (1 <= L <= 100,000,000) минут
подряд без перерывов. У неё есть выбор из N (1 <= N <= 20)
фильмов, каждый из которых имеет определённую длительность
и множество показов(сеансов) в течение дня. Беси может войти
на фильм и уйти из него в течение одного из этих сеансов,
однако не хочет даже посещать один и тот же фильм дважды и
она не может остаться на фильме после завершения сеанса,
который она только что смотрела, даже если другой сеанс
этого фильма перекрывает этот.

Помогите Беси определить, может ли она достичь своей цели
смотреть фильмы непрерывно с момента времени 0 до момента времени L.
Если да. то выведите минимальное количество фильмов, которые
она должна посмотреть, чтобы достичь своей цели.

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

Первая строка ввода содержит N и L.

Следующие N строк каждая описывают фильмы. Они начинаются с
целой длительности фильма D (1 <= D <= L) и количества сеансов C
(1 <= C <= 1000). оставшиеся C целых чисел той же строки, каждое
в диапазоне 0..L, определяют времена начала сеансов этого фильма.
Времена начала сеансов различны, в интервале 0..L и даны в порядке
возрастания.

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

Одно целое число, указывающее минимальное количество сеансов,
которые Беси должна посмотреть, чтобы достичь своей цели. Если
это невозможно, выведите -1.

Примечание

Беси должна придти на первый сеанс 4-го фильма с момента времени 0
по момент времени 20. Затем она смотрит первый фильм с момента 20
до момента 65. А затем она смотрит второй фильм с момента времени
65 до момента времени 100.

Каждый год, Фермер Джон привозит \(N\) своих коров соревноваться на ярмарку. Его главный соперник Фермер Пауль привозит своих \(M\) коров (\(1 \leq N \leq 1000, 1 \leq M \leq 1000\)).

Каждая из этих \(N + M\) коров получает индивидуальную оценку. Однако в текущем году финальное соревнование будет ограничено командой из \(K\) коров (\(1 \leq K \leq 10\)). Поэтому ФД и ФП отбирают по \(K\) коров. Затем они разбиваются на пары: лучшая корова ФД становится в пару с лучшей коровой ФП, вторая корова ФД, становится в пару со второй коровой ФП и т.д. ФД выиграет, если в каждой из этих пар его корова будет иметь более высокую оценку.

Помогите ФД посчитать количество различных способов которыми ФД и ФП могут отобрать своих коров так, чтобы ФД выиграл в соревновании. Точнее, каждая считается каждая различная пара (\(K\) коров от ФД, и \(K\) коров от ФП). Выведите ответ по модулю 1,000,000,009.

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

Первая строка ввода содержит \(N\), \(M\), \(K\). Значение \(K\) будет не более чем \(N\) и \(M\).

Следующая строка содержит оценки \(N\) коров ФД.

Следующая строка содержит оценки \(M\) коров ФП.

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

Выведите количеаство способов, которыми ФД и ФП могут отобрать свои команды, чтобы победил ФД. Выводите это число по модулю 1,000,000,009.

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

Но построить робо-корову - дело непростое. Имеется \(N\) (\(1 \leq n \leq 100,000\)) индивидуальных позиций на роботе, в которых должны размещаться микроконтроллеры. Один микроконтроллер должен разместится в одном месте. Для каждого из этих мест Бесси может выбрать микроконтроллер из различных моделей, которые отличаются по цене.

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

Беси хочет сделать своё стадо как можно дешевле. Помогите ей определить минимальную стоимость сделать это.

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

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

Следующие \(N\) строк содержат описание различных микроконтроллеров доступных для каждого месте. \(i\)-ая такая строка начинается с \(M_i\) (\(1 \leq M_i \leq 10\)), определяющего количество моделей микроконтроллеров доступных для места \(i\). Затем следуют \(M_i\) разделённых одиночными пробелами целых чисел \(P_{i,j}\), определяющих стоимость этих моделей (\(1 \le P_{i,j} \le 100,000,000\)).

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

Выведите одну строку - минимальную стоимость сконструировать \(K\) роботов.

Lazy Sort#90320

У Фермера Джона есть \(N\) коров (\(2 \leq N \leq 5\cdot 10^6\)) и пытается заставить их отсортировать неотрицательный целочисленный массив \(A\) длины \(N\), полагаясь на их лень. У него много тяжелых коробок, поэтому он выстраивает коров одну за другой, где корова \(i+1\) находится за коровой \(i\), и дает \(a_i\) коробок корове \(i\) (\(0\le a_i\)).

Коровы по своей природе ленивы, поэтому они всегда ищут способ передать свою работу кому-то другому. От коровы \(1\) до \(N-1\) по порядку каждая корова смотрит на корову позади себя. Если у коровы \(i\) строго больше коробок, чем у коровы \(i+1\), корова \(i\) считает, что это «несправедливо» и отдает одну из своих коробок корове \(i+1\). Этот процесс повторяется, пока каждая корова не будет удовлетворена.

Фермер Джон пометил количество ящиков \(b_i\), которое каждая корова \(i\) держит и создал массив \(B\) из этих величин. Если \(B = sorted(A)\) тогда ФД счастлив. К несчастью. ФД забыл все кроме \(Q\) величин массива \(A\). (\(2 \leq Q \leq \min(N, 100)\)). К счастью, эти величины включают количество ящиков, которое он собирается дать первой и последней корове. Каждое число, которое помнит ФД задано в виде \(c_i \; v_i\), представляющее, что \(a_{c_i}=v_i\). (\(1 \leq c_i \leq N\), \(1\le v_i\le 10^9\)). Определите количество различных способов, которыми могут быть заполнены пропущенные величины так чтобы ФД был счастливым. ответ выводите по модулю \(10^9+7\).

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

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

Следующие \(Q\) строк содержат два разделённых пробелом целых числа \(c_i \; v_i\) представляющих что корова \(c_i\) изначально держит \(v_i\) ящиков. Гарантируется, что \(c_1 = 1\), \(c_Q = N\), и \(c_i < c_{i+1}\) (порядок коров строго возрастающий).

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

Выведите количество способов по модулю \(10^9+7\), которыми могут быть назначены значения \(a_i\), так, что ФД будет счастлив после того, как коровы выполнят ленивую сортировку. Гарантируется существование как минимум одного такого назначения.

Вам дана длинная строка \(S\) из символов M и O и целое число \(K \geq 1\). Посчитайте количество способов разбить \(S\) на подпоследовательности так, что каждая подпоследовательность MOOOO....O с ровно \(K\) O, по модулю \(10^9+7\).

Поскольку строка очень длинная, Вам она не дана точно. Вместо этого Вам дано целое число \(L\) (\(1 \leq L \leq 10^{18}\)), и строка \(T\) длины \(N\) (\(1 \leq N \leq 10^6\)). Строка \(S\) есть конкатенация \(L\) копий строки \(T\).

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

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

Вторая строка содержит строку \(T\) длины \(N\). Каждый символ или M или O.

Гарантируется, что количество декомпозиций \(S\) не равно 0.

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

Выведите количество разбиений строки \(S\), по модулю modulo \(10^9+7\).

**Замечание: время на тест для этой задачи 4 сек, в два раза большеЮ чем по умолчанию.**

У Фермера Джона есть двоичное дерево с \(N\) вершинами, пронумерованными от \(1\) до \(N\) (\(1 \leq N < 2\cdot 10^5\) и \(N\) нечетное). Для \(i>1\), родитель вершины \(i\) есть \(\lfloor i/2\rfloor\). Каждая вершина имеет начальное числовое значение \(a_i\), и стоимость \(c_i\) изменить начальное значение на любую другую целую величину (\(0\le a_i,c_i\le 10^9\)).

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

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

Также у ФД есть список из \(Q\) \((1 \leq Q \leq 2\cdot 10^5)\) независимых запросов, которые указывают целевое значение \(m\) (\(0\le m\le 10^9\)). Для каждого запроса ФД сначала изменяет некоторые начальные значения в вершинах, и затем выполняет вышеописанный алгоритм медианной аппроксимации. Для каждого запроса определите минимальную возможную суммарную стоимость, чтобы этот алгоритм давал результат \(m\).

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

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

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

Следующая строка содержит \(Q\).

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

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

Выведите \(Q\) строк, минимально возможную стоимость, обеспечивающую ответ \(m\) как результат работы описанного алгоритма.

**Замечание: мы не рекомендуем использовать для решения этой задачи язык программирования Питон, чтобы получить полный балл по этой задаче. **

\(N\) (\(1 \leq N \leq 7500\)) коров Фермера Джона стоят в ряд. Корова \(1\) стоит в начале этого ряда, а корова \(N\) - в конце. \(i\)-ая корова имеет разновидность \(a_i\) (\(1 \leq a_i \leq N\)).

ФД везет своих коров на осмотр в местную больницу для крупного рогатого скота. Однако ветеринар, специализирующийся на коровах, очень придирчив и хочет провести осмотр \(i\)-ой коровы в очереди, только если она относится к виду \(b_i\) (\(1 \leq b_i \leq N\)).

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

  • Выбирает два числа \(l\) и \(r\) такие, что \(1 \leq l \le r \leq N\). Реверсирует порядок коров между \(l\)-ой и \(r\)-ой коровами включительно.

ФД хочет измерить насколько эффективен его подход. Для каждого \(c=0 \ldots N\), помогите ФД помогите ФД определить количество различных операций (\(l,r\)) таких, что ровно \(c\) коров будут проверены ветеринаром. Две операции (\(l_1,r_1\)) и (\(l_2,r_2\)) считаются различными, если \(l_1 \neq l_2\) или \(r_1 \neq r_2\).

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

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

Вторая строка содержит \(a_1, a_2, \ldots, a_N\).

Третья строка содержит \(b_1, b_2, \ldots, b_N\).

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

Выведите \(N+1\) строку, где \(i\)-ая строка содержит количество различных операций (\(l,r\)), которые обеспечат, что ровно \(i-1\) корова будет проверена.

**Замечание: мы не рекомендуем использовать для решения этой задачи язык программирования Питон, чтобы получить полный балл по этой задаче. **

\(N\) (\(1 \leq N \leq 7500\)) коров Фермера Джона стоят в ряд. Корова \(1\) стоит в начале этого ряда, а корова \(N\) - в конце. \(i\)-ая корова имеет разновидность \(a_i\) (\(1 \leq a_i \leq N\)).

ФД везет своих коров на осмотр в местную больницу для крупного рогатого скота. Однако ветеринар, специализирующийся на коровах, очень придирчив и хочет провести осмотр \(i\)-ой коровы в очереди, только если она относится к виду \(b_i\) (\(1 \leq b_i \leq N\)).

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

  • Выбирает два числа \(l\) и \(r\) такие, что \(1 \leq l \le r \leq N\). Реверсирует порядок коров между \(l\)-ой и \(r\)-ой коровами включительно.

ФД хочет измерить насколько эффективен его подход. Для каждого \(c=0 \ldots N\), помогите ФД помогите ФД определить количество различных операций (\(l,r\)) таких, что ровно \(c\) коров будут проверены ветеринаром. Две операции (\(l_1,r_1\)) и (\(l_2,r_2\)) считаются различными, если \(l_1 \neq l_2\) или \(r_1 \neq r_2\).

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

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

Вторая строка содержит \(a_1, a_2, \ldots, a_N\).

Третья строка содержит \(b_1, b_2, \ldots, b_N\).

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

Выведите \(N+1\) строку, где \(i\)-ая строка содержит количество различных операций (\(l,r\)), которые обеспечат, что ровно \(i-1\) корова будет проверена.

**Замечание: Время на тест 3 сек, в 1.5 больше чем по умолчанию .**

Вам дан целочисленный массив длины \(N\): \(a_1,a_2,\dots,a_N\) (\(2\le N\le 10^6, 1\le a_i\le N\)). Выведите сумму ответов для подзадачи ниже по всем \(N(N+1)/2\) непрерывным подмассивам массива \(a\).

По заданному непустому списку целых чисел чередуйте следующие операции (начиная с первой операции) пока в списке останется ровно одно число.

  1. Замените два последовательных целых числа на их минимум.
  2. Замените два последовательных целых числа на их максимум.

Определите максимально возможное значение оставшегося числа.

Например,

[4, 10, 3] -> [4, 3] -> [4]
[3, 4, 10] -> [3, 10] -> [10]

В первом массиве, \((10, 3)\) заменяется на \(\min(10, 3)=3\) и \((4, 3)\) заменяется на \(\max(4, 3)=4\).

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

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

Вторая строка содержит \(a_1,a_2,\dots,a_N\).

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

Сумма ответов на подзадачу по всем подмассивам.

Вы одиночный робот, находящийся изначально в точке \(0\) на окружности с периметром \(L\) (\(1 \le L \le 10^9\)). Вы можете двигаться на \(1\) за секунду по или против часовой стрелки. Все движения в этой задаче непрерывны.

Ваша цель - разместить ровно \(R-1\) роботов так, чтобы в конце каждые два последовательных робота были на расстоянии \(L/R\) друг от друга (\(2\le R\le 20\), \(L\) делится нацело \(R\)). Всего имеется \(N\) (\(1\le N\le 10^5\)) точек активации, \(i\)-ая из которых расположена на расстоянии \(a_i\) против часовой стрелки от \(0\) (\(0\le a_i<L\)). Если в текущий момент Вы находитесь в точке активации, Вы можете поместить робота в эту точку. Все роботы (включая оригинального) двигаются против часовой стрелки со скоростью \(1\) единица за \(K\) секунд (\(1\leq K\leq 10^6\)).

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

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

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

Следующая строка содержит \(N\) разделённых одиночными пробелами целых чисел \(a_1,a_2,\dots,a_N\).

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

Минимальное время, требуемое чтобы достичь цели.

Замечание: ограничение по памяти для этой задачи 512 Мбт, в два раза больше, чем по умолчанию **

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

Имеется \(N\) (\(2\le N\le 5000\)) ячеек в строке, помеченных \(1\dots N\) слева направо. Их начальные размеры \(s_1,s_2,\dots,s_N\) (\(1\le s_i\le 10^5\)). Пока есть более чем две соседние ячейки, равновероятно выбирается пара соседних ячеек и сливается в одну ячейку по следующим правилам:

Если ячейка с меткой \(a\) и размером \(c_a\) сливается с ячейкой с меткой \(b\) размером \(c_b\), результирующая ячейка имеет размер \(c_a+c_b\) и метку, равную метке большей ячейки и большей метке в случае равенства ячеек. Формально метка вычисляется так $\begin{cases} a & ca > cb \\ b & ca < cb \\ \max(a,b) & ca = cb \end{cases}.$

Для каждой метки \(i\) в интервале \(1\dots N\) вероятность того, что финальная ячейка имеет метку \(i\) может быть выражена в виде \(\frac{a_i}{b_i}\) где \(b_i\not\equiv 0\pmod{10^9+7}\). выведите \(a_ib_i^{-1}\pmod{10^9+7}\).

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

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

Следующая строка содержит \(s_1,s_2,\dots, s_N\).

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

Вероятности того что финальная ячейка имеет метку \(i\) (по модулю \(10^9+7\)) для каждого \(i\) в интервале \(1\dots N\) - на отдельной строке

Беси проводит каникулы на сети из \(N\) (\(2\le N\le 10^4\)) островов помеченных \(1\dots N\) соединённых \(M\) двунаправленными мостами, каждый из которых соединяет два острова (\(N-1\le M\le 3/2(N-1)\)). Гарантируется, что эти мосты формируют простой граф (в частности, нет двух мостов, которые соединяют одну и ту же пару островов, и нет моста из острова в себя же).

Также гарантируется, ни один мост не лежит более чем в одном простом цикле. Цикл называется простым, если он не содержит повторяющиеся острова.

Беси начинает на острове \(1\) и путешествует в соответствии со следующей процедурой:

  1. Если нет мостов, ведущих в соседние острова, по которым она ещё не ездила, она завершает путешествие.
  2. Иначе, с вероятностью \(p_i\pmod{10^9+7}\) она завершает путешествие.
  3. Иначе, из всех мостов на соседние острова, по которым она ещё не перемещалась, она равновероятно выбирает один и перемещается по нему.

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

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

Первая строка содержит количество независимых подтестов \(T\) (\(1\le T\le 10\)). Последовательные подтесты разделены пустой строкой.

Каждый подтест имеет следующую структуру:

Первая строка содержит \(N\) и \(M\), где \(N\) - количество островов, \(M\) - количество мостов. Гарантируется, что сумма \(N\) по всем подтестам не превысит \(10^4\).

Вторая строка содержит \(p_1, p_2,\dots, p_N\) (\(0\le p_i<10^9+7\)).

Следующие \(M\) строк описывают мосты. \(i\)-ая строка содержит целые числа \(u_i\) и \(v_i\) (\(1\le u_i<v_i\le N\)), обозначающие, что \(i\)-ый мост соединяет острова \(u_i\) и \(v_i\).

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

Для каждого подтеста выведите на отдельной строке вероятности по модулю \(10^9+7\) завершения путешествия на каждом острове от \(1\) to \(N\), разделённые одиночными пробелами.

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