Динамическое программирование

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

Пусть дана строка \(s\), назовём \(F(s)\) строку \(s\) за которой идёт строка \(s\) "циклически сдвинутая" на один символ вправо (последний символ становится новым первым символом). По заданной строке \(s\), коровы строят свою строку бесконечной длины повторя применение \(F\); каждый шаг удваивает длину текущей строки.

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

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

Ввод состоит из одной строки, содержащий строку, за которой следует число \(N\). Строка содержит не более 30 больших латинских букв, \(N \leq 10^{18}\).

Заметим, что \(N\) может не поместиться в 32-битное целое, поэтому нужно использовать 64-битное целое (например long long для С/С++).

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

Выведите \(N\)-ый символ в бесконечной строке построенной по данной. Первый символ имеет \(N=1\).

Фермер Джон выстроил \(N\) своих коров в ряд, чтобы сделать фото (\(1 \leq N \leq 50\)). Высота \(i\)-ой коровы в этом ряду есть \(a(i)\), и ФД думает, фото будет эстетически приятным, если будет иметь большую возрастающую по росту коров подпоследовательность.

Напомним, подпоследовательность это подмножество \(a(i_1), a(i_2), \ldots, a(i_k)\) элементов из последовательности, где индексы \(i_1 < i_2 < \ldots < i_k\). Мы говорим, что подпоследовательность возрастающая, если \(a(i_1) \leq a(i_2) \leq \ldots \leq a(i_k)\).

ФД может переупорядочивать коров следующим образом выбрать любую подпоследжовательность и реверсировать её элементы

Например, если мы имееем список

1 6 2 3 4 3 5 3 4

мы можем реверсировать следующие элементы

1 6 2 3 4 3 5 3 4
  ^         ^ ^ ^

получим

1 4 2 3 4 3 3 5 6
  ^         ^ ^ ^

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

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

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

Первая строка ввода содержит числа \(N\). Остальные \(N\) строк содержат \(a(1) \ldots a(N)\), целые числа в интервале \(1 \ldots 50\).

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

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

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

Фермер Джон хочет сыграть с Бесси \(N\) раз (\(1 \leq N \leq 100,000\)). Бесси будучи экспертом в этой игре может предсказать каждый из жестов ФД. Но как корова, она очень ленива. Поэтому она хочет играть одним и тем же жестом много раз подряд. В действительности, она хочет переключаться между жестами не более чем \(K\) (\(0 \leq K \leq 20\)) раз за все игры. Например, если \(K=2\), она может играть "копыто" первые игры, затем переключиться на бумагу и в конце играть снова "копыто".

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

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

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

Оставшиеся \(N\) строк содержат жесты ФД, каждый H, P или S.

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

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

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

Фермер Джон начинает в позиции (\(f_x, f_y\)) и планирует сделать \(N\) шагов, каждый из которых в одном из 4 направлений: 'N' (север), 'E' (восток), 'S'(юг), 'W' запад. Беси начинает в позиции (\(b_x, b_y\)) и делает аналогичные \(M\) шагов. Эти пути могут иметь общие точки. В каждый момент времени ФД может остаться в своей текущей позиции либо сделать один шаг вперёд по своему маршруту (если ещё не достиг финальной позиции). В каждый момент времени (исключая тот момент, когда они находятся в стартовой позиции), энергия, потреблённая их радиоустройствами равна квадрату расстояния между ними.

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

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

Первая строка ввода содержит \(N\) и \(M\) (\(1 \leq N, M \leq 1000\)). Вторая строка содержит целые числа \(f_x\) и \(f_y\), третья строка содержит \(b_x\) и \(b_y\) (\(0 \leq f_x, f_y, b_x, b_y \leq 1000\)). Следующая строка содержит строку длины \(N\), описывающая путь ФД, и последняя строка содержит строку длины \(M\), описывающая путь Беси.

Гарантируется, что координаты ФД и Беси всегда в интервале (\(0 \leq x,y \leq 1000\)) на протяжении всего маршрута. Заметим, что Восток - это положительное направление по оси Х, а Север - положительное направление по оси Y.

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

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

Каждый год, Фермер Джон привозит \(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.

Каждый день Фермер Джон прогуливается по своему пастбищу проверить состояние всех своих коров. У него на ферме есть коровы двух пород: Holsteins и Guernseys. \(H\) коров породы Holsteins последовательно пронумерованы \(1 \ldots H\), и \(G\) Guernseys последовательно пронумерованы \(1 \ldots G\) ($1 \leq H \leq 1000, 1 \leq G \leq 1000$). Каждая из его коров расположена в точке на плоскости (точки не обязательно различны).

ФД начинает свою прогулку в позиции Holstein 1 а заканчивает в позиции Holstein \(H\). Он хочет посетить каждую корову и для удобства ведёт чек-лист посещения коров. Он хочет посещать Holsteins и Guernseys в порядке их нумерации. В последовательности всех \(H+G\) коров, в порядке их посещения, коровы породы Holsteins \(1 \ldots H\) появятся как подпоследовательности (не обязательно непрерывные), аналогично и с коровами породы Guernseys. Другими словами, последовательность всех \(H+G\) коров будет сформирована перемешиванием списка Holsteins пронумерованных \(1 \ldots H\) и списка Guernseys, пронумерованных \(1 \ldots G\).

Когда ФД двигается от одной коровы к другой, преодолевая расстояние \(D\), он тратит \(D^2\) энергии. Помогите ему определить, минимальное количество энергии, требуемое чтобы посетить всех его коров в соответствии с правилами, описанными выше.

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

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

Последующие \(H\) строк содержат \(x\) и \(y\) координаты \(H\) Holsteins, и следующие \(G\) строк содержат координаты Guernseys. Каждая координата это целое число в интервале \(0 \ldots 1000\).

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

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

Беси забралась на кухню Фермера Джона и обнаружила там кучу лимонов и апельсинов там (неограниченное количество и того и другого) и хочет съесть как можно больше .

Максимум сытости Беси равен \(T\) (\(1 \le T \le 5,000,000\)). Поедание апельсина увеличивает её сытость на \(A\), а поедание лимона увеличивает её сытость на \(B\) (\(1 \le A, B \le T\)). Дополнительно, если она хочет, Беси может попить воды не более одного раза, что мгновенно уменьшит её сытость вдвое (с округлением вниз).

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

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

Первая и единственная строка содержит три целых числа \(T\), \(A\), and \(B\).

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

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

Беси забралась на кухню Фермера Джона и обнаружила там кучу лимонов и апельсинов там (неограниченное количество и того и другого) и хочет съесть как можно больше .

Максимум сытости Беси равен \(T\) (\(1 \le T \le 5,000,000\)). Поедание апельсина увеличивает её сытость на \(A\), а поедание лимона увеличивает её сытость на \(B\) (\(1 \le A, B \le T\)). Дополнительно, если она хочет, Беси может попить воды не более одного раза, что мгновенно уменьшит её сытость вдвое (с округлением вниз).

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

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

Первая и единственная строка содержит три целых числа \(T\), \(A\), and \(B\).

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

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

Фермер Джон и его стадо играют в фрисби. Беси бросает фрисби в поле,
и соирается бежать прямо к Марку.
Марк имеет высоту H (1 <= H <= 1,000,000,000), но имеется также N
(2 <= N <= 20) коров из команды Беси вокруг Марка . Они могут поймать
Фрисби, только если став друг на друга, они построят пирамиду высотой
не менее, чем высота Марка.
Каждая из N коров имеет высоту, вес и силу.
Сила указывает максимальный суммарный вес, который может находиться
выше её.

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

Максимальный коэффициент безопасности пирамиды - количество веса,
которое может быть добавлено, на её вершину, так чтобы не превысить
силу ни одной из коров.

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

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

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

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

Если команда Беси может построить пирамиду, достаточную, чтобы поймать
фрисби, выведите максимально достижимый фактор безопасности для такой
пирамиды. Иначе выведите фразу "Mark is too tall" (без кавычек).

Вам дана длинная строка \(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\).

У Фермера Джона есть \(N\) коров, помеченных числами от \(1\) до \(N\) (\(2\le N\le 16\)). Отношение дружбы между этими коровами может быть смоделировано ненаправленным графом с \(M\) (\(0\le M\le N(N-1)/2\)) ребрами. Две коровы являются друзьями, если и только если между ними есть ребро в этом графе.

За одну операцию Вы можете добавить или удалить одно ребро в этом графе. Посчитайте минимальное количество операций, которое требуется выполнить, чтобы обеспечить следующее свойство в этом графе: Если коровы \(a\) и \(b\) - друзья, тогда для любой другой коровы \(c\) по крайней мере одна из коров \(a\) и \(b\) является другом коровы \(c\).

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

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

Каждая из следующих \(M\) строк содержит пару чисел \(a\) и \(b\) (\(1\le a<b\le N\)). Никакая пара друзей не повторится.

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

Количество ребер, которые требуется удалить или добавить.

У Беси есть два массива длины \(N\) (\(1 \le N \le 500\)). \(i\)-ый элемент первого массива есть \(a_i\) (\(1 \le a_i \le 10^6\)). \(i\)-ый элемент второго массива есть \(b_i\) (\(1 \le b_i \le 10^6\)).

Беси хочет разделить два массива на не-пустые подмассивы так что будут выполняться следующие условия:

  1. Каждый элемент принадлежит точно 1 подмассиву.
  2. Оба массива разделены на одинаковое количество подмассивов - пусть \(k\). То есть, первый массив разделён ровно на \(k\) подмассивов. И второй массив также разделён ровно на \(k\) подмассивов.
  3. Для всех \(1 \le i \le k\),, среднее \(i\)-го подмассива слева первого массива строго меньше либо равно среднему \(i\)-го подмассива слева второго массива.

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

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

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

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

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

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

Выведите количество способов разделить два массива на непустые подмассивы удовлетворяющих вышеописанным условиям. Ответ выводите по модулю \(10^9+7\).

Парейдолия – это явление, при котором ваши глаза склонны видеть в изображениях знакомые узоры, которых на самом деле не существует — например, видение лица в облаке. Поскольку фермер Джон постоянно находится рядом с коровами, он часто видит коровьи узоры в повседневных предметах. Например, если он смотрит на строку "bqessiyexbesszieb", глаза фермера Джона игнорируют некоторые буквы и все, что он видит, это «bessiexbessieb» — строка, содержащая два последовательных подстроки, равные "bessie".

Дана строка длиной не более \(2\cdot 10^5\), состоящая только из символов a-z, где каждый символ имеет связанную стоимость удаления, вычислите максимальную количество непрерывных подстрок, равных "bessie", которые вы можете сформировать, удалив ноль или более символов из него, и минимальную общую стоимость символов, которую вам нужно удалить, чтобы сделать это.

ФОРМАТ ВВОДА (ввод поступает с терминала/стандартного ввода):

Первая строка содержит строку. Вторая строка содержит стоимость удаления связанную с каждым символом (целое число в диапазоне \([1,1000]\)).

ФОРМАТ ВЫВОДА (вывод на терминал / стандартный вывод):

Максимальное количество вхождений и минимальная стоимость создания этого числа вхождений.

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

Формально, у Вас есть дерево с вершинами помеченными \(1\dots N\) (\(2\le N\le 2\cdot 10^5\)) с корнем в вершине \(1\). Каждая вершина изначально не активна. За одну операцию Вы можете переключить одну вершину из неактивного состояния в активное или обратно. Выведите минимально возможную длину последовательности операций, удовлетворяющей обоим нижеуказанным условиям:

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

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

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

Вторая строка содержит \(p_2 \dots p_N\) (\(1\le p_i<i\)), где \(p_i\) обозначает родительскую вершину вершины \(i\) в этом дереве.

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

Выведите минимально возможную длину.

Фермер Джон изучает эволюцию пород коров. Результат - корневое дерево с \(N\) (\(2\le N\le 10^5\)) вершинами, помеченными \(1\ldots N\), каждая вершина соответствует одной породе коров. Для каждого \(i\in [2,N]\), родитель вершины \(i\) есть вершина \(p_i\) (\(1\le p_i<i\)), это означает, что порода \(i\) эволюционировала из породы \(p_i\). Вершина \(j\) называется предком вершины \(i\), если \(j=p_i\) или \(j\) предок вершины \(p_i\).

Каждая вершина \(i\) в этом дереве ассоциируется с породой, имеющей целое число пятен \(s_i\). Дисбалансом такого дерева называется максимум \(|s_i-s_j|\) по всем парам \((i,j)\) таким, что \(j\) есть предок \(i\).

Фермер Джон не знает точное значение \(s_i\) для каждой породы, но он знает нижнюю и верхнюю границу этих величин. Ваша задача - назначить значения \(s_i \in [l_i,r_i]\) (\(0\le l_i\le r_i\le 10^9\)) каждой вершине так, чтобы минимизировать дисбаланс этого дерева.

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

Первая строка содержит \(T\) (\(1\le T\le 10\)), количество независимых подтестов в тесте. и целое число \(B\in \{0,1\}\).

Каждый подтест начинается со строки, содержащей \(N\), за которым следуют \(N-1\) целых чисел \(p_2,p_3,\ldots,p_N\).

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

Гарантируется, что сумма \(N\) по всем подтестам не превысит \(10^5\).

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

Для каждого подтеста выведите одну или две строки в зависимости от значения \(B\).

Первая строка должна содержать минимальный дисбаланс.

Если \(B=1,\) выведите дополнительную строку с разделёнными одиночными пробелами целыми числами \(s_1,s_2,\ldots, s_N\) содержащими назначения количеств пятен для достижения вышеуказанного дисбаланса. Любое правильное назначение будет принято.

Drought#90165

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

ФД хочет кормить своих коров пока у всех у них не станет один и тот же уровень голода - целый, неотрицательный. Хотя он не знает точно уровень голода каждой из своих коров, он знает верхнюю границу уровня голода каждой коровы, то есть уровень голода \(i\)-ой cow \(h_i\) не более \(H_i\) (\(0\le H_i\le 1000\)).

Ваша задача - посчитать по модулю \(10^9+7\) количество комбинаций из \(N\) уровней голода \([h_1,h_2,\ldots,h_N]\) таких, что ФД сможет достичь своей цели.

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

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

Вторая строка содержит \(H_1,H_2,\ldots,H_N\).

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

Количество комбинаций из \(N\) чисел уровней голода по модулю \(10^9+7\).

Пастбище Фермера Джона можно рассматривать решётку из квадратных ячеек размером \(N\times M\) (\(2\le N\le 10^9\), \(2\le M\le 2\cdot 10^5\)) (как большая шахматная доска). Ячейка в строке \(x\) сверху в колонке \(y\) обозначается как \((x,y)\) для каждого \(x\in [1,N], y\in [1,M]\). Далее для каждого \(y\in [1,M]\), \(y\)-ая колонка ассоциируется со стоимостью \(c_y\) (\(1\le c_y\le 10^9\)).

Беси начинает в ячейке \((1,1)\). Если она находится в ячейке \((x,y)\), она может выполнить одно из следующих действий:

  • Если \(y<M\), Беси может переместиться в следующую колонку (увеличивая \(y\) на 1) за цену \(x^2\).
  • Если \(x<N\), Беси может переместиться в следующую строку (увеличивая \(x\) на 1) за цену \(c_y\).

ВАм даются \(Q\) (\(1\le Q\le 2\cdot 10^5\)) независимых запросов, каждый в виде \((x_i,y_i)\) (\(x_i\in [1,N], y_i\in [1,M]\)), вычислите минимально возможную цену для Беси переместиться из \((1,1)\) в \((x_i,y_i)\). compute the minimum possible total

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

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

Вторая строка содержит \(M\) разделённых пробелом целых чисел \(c_1,c_2,\ldots,c_M\).

Третья строка содержит \(Q\).

Каждая из последующих \(Q\) строк содержит два целых числа \(x_i\) и \(y_i\).

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

\(Q\) строк, содержащих ответы на каждый запрос.

Заметим, что ответ требует использования 64-битного целого, например "long long" в C/C++).

Paired Up#90125
Имеется \(N\) (\(1\le N\le 10^5\)) коров на числовой прямой. Расположение \(i\)-ой коровы задано числом \(x_i\) (\(0 \leq x_i \leq 10^9\)), а вес \(i\)-ой коровы задан числом \(y_i\) (\(1 \leq y_i \leq 10^4\)).

По сигналу Фермера Джона некоторые из коров формируют пары так, что

  • Каждая пара состоит из двух различных коров \(a\) и \(b\) чьи расположения не далее \(K\) друг от друга (\(1\le K\le 10^9\)); то есть \(|x_a-x_b|\le K\).
  • Каждая корова или является частью некоторой пары или не является частью некоторой пары.
  • Группировка в пары называется максимальной, если никакие две из неспаренных коров не могут образовать пары.

    Определите интервал возможных сумм весов неспаренных коров. А именно

    • Если \(T=1\), вычислите минимально возможную сумму весов неспаренных коров.
    • Если \(T=2\), вычислите максимально возможную сумму весов неспаренных коров.

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

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

    В каждой из последующих \(N\) строк \(i\)-ая строка содержит \(x_i\) и \(y_i\). Гарантируется, что \(0\le x_1< x_2< \cdots< x_N\le 10^9\)

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

    Выведите минимальную или максимальную возможные суммы весов неспаренных коров.

Корова Беси идёт с любимого пастбища в амбар.

Пастбище и амбар расположены на решётке \(N \times N\) (\(2 \leq N \leq 50\)), причём пастбище находится в левом верхнем углу, а амбар - в правом нижнем. Беси хочет попасть в амбар как можно быстрее, поэтому она ходит только вниз и вправо. В некоторых ячейках находятся стоги сена, которые Беси должна обходить.

Беси чувствует себя уставшей, поэтому она хочет изменить направление движения не более \(K\) раз (\(1 \leq K \leq 3\)).

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

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

Ввод для каждого теста содержит \(T\) подтестов, каждый из которых описывает различную ферму и для каждого из которых нужно выдать правильный ответ, чтобы получить полный балл за тест. Первая строка ввода содержит \(T\) (\(1 \leq T \leq 50\)). Далее описывается каждый из под-тестов.

Каждый из под-тестов начинается со строки, содержащей \(N\) и \(K\).

Каждая из последующих \(N\) строк содержит строку из \(N\) символов. Каждый символ либо \(\texttt{.}\) если ячейка пуста, или \(\texttt{H}\) если в ячейке стог сена. Гарантируется, что левый верхний и правый нижний углы фермы не содержат стоги сена.

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

Выведите \(T\) строк, \(i\)-ая тсрока содержит количество различных путей, которыми может пройти Беси для \(i\)-го подтеста.

У Фермера Джона есть маленькое поле в виде решётки \(N\) by \(N\) (\(1 \le N \le 2000\)). Где \(j\)-ый квадрат слева в \(i\)-ой строке сверху обозначается \((i,j)\) для всех \(1 \le i,j \le N\). ФД хочет посадить на своём поле пшеницу и люцерну, а для их поливки установить специальные разбрызгиватели.

Разбрызгиватель для пшеницы в квадрате \((I,J)\) разбрызгивает на все квадраты ниже и слева: то есть, квадраты \((i,j)\) с \(I \le i\) и \(j \le J\).

Разбрызгиватель для люцерны в квадрате \((I,J)\) разбрызгивает на все квадраты вверху и справа: то есть, квадраты \((i,j)\) с \(i \le I\) b \(J \le j\).

На квадрате до которого достаёт один или более разбрызгиватель для пшеницы может расти пшеница, на квадрате до которого достаёт один или более разбрызгиватель для люцерны может расти люцерна. На квадрате, до которого достают оба типа разбрызгивателей (или ни одного типа разбрызгивателей) не может расти ничего.

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

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

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

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

Для каждого h \(1\le i\le N,\) \(i+1\)-ая строка содержит строку длиной \(N\) обозначающую \(i\)-ую строку решётки. Каждый символ строки один из следующих: 'W' (корова), или '.' (свободный квадрат).

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

Выведите остаток отделения на \(10^9+7\) количества способов установить разбрызгиватели.

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