Информатика

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

Коровы передают две строки \(s\) и \(t\), каждая с длиной не более \(10^5\), состоящие только из маленьких латинских букв от 'a' до 'r'. Вы должны ответить на \(Q\) запросов (\(1 \leq Q \leq 10^5\)). Для каждого запроса нужно ответить, совпадут ли строки, если в каждой из них оставить только указанные в запросе маленькие латинские буквы (удалив все остальные символы).

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

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

Вторая строка содержит \(t\).

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

Каждая из последующих \(Q\) строк содержит строку запроса. В строке запроса символы не повторяются и задаются в алфавитном порядке. Никакой запрос не появляется более одного раза.

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

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

Имеется строка \(s\) длиной не более \(2 \cdot 10^5\) символов (только трёх 'C', 'O', 'W'). Требуется узнать, можно ли её превратить в одну букву 'C', используя следующие операции:

1. Выбрать два соседних одинаковых символа и удалить их.

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

В задаче требуется дать ответ для \(Q\) (\(1\le Q\le 2\cdot 10^5\)) подстрок строки \(s\).

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

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

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

Каждая из последующих \(Q\) строк содержит два целых числа \(l\) и \(r\) (\(1\le l\le r\le |s|\), где \(|s|\) означает длину строки \(s\)).

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

Строка длины \(Q\), где \(i\)-ый символ есть 'Y', если \(i\)-ая подстрока может быть сокращена до 'C'. и 'N' в противном случае.

Падают яблоки! В определённые моменты времени некоторое количество яблок падает в некоторые точки числовой прямой. В определённый момент времени некоторые коровы появляются на числовой прямой и НАЧИНАЮТ ловить яблоки.

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

Сколько максимально яблок смогут поймать коровы, если будут действовать сообща оптимально?

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

Первая строка содержит \(N\) (\(1\le N\le 2\cdot 10^5\)), количество раз когда яблоки падали на числовую прямую или там появлялись коровы.

Каждая из последующих \(N\) строк содержит четыре целых числа \(q_i\), \(t_i\), \(x_i\), \(n_i\) (\(q_i\in \{1,2\}, 0\le t_i\le 10^9, 0\le x_i\le 10^9, 1\le n_i\le 10^3\)).

  • Если \(q_i=1\), это значит, что \(n_i\) коров прибыли на числовую прямую в момент времени \(t_i\) в позицию \(x_i\).
  • Если \(q_i=2\), это значит, что \(n_i\) яблок упали на числовую прямую в момент времени \(t_i\) в позицию \(x_i\).

Гарантируется, что все упорядоченные пары \((t_i,x_i)\) различны.

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

Максимальное количество яблок, которое коровы могут поймать сообща.

Фермер Джон пытается сделать совершенную фотографию своих \(N\) коров (\(2 \leq N \leq 2\cdot 10^5\), \(N\) четное).

У ФД есть коровы двух пород Guernseys и Holsteins. Чтобы сделать свою фотографию как можно более эстетичной, он хочет выстроить своих коров так, чтобы как можно больше коров породы Guernseys находились на позициях с чётными номерами (первая позиция в ряду - нечётная, следующая чётная и т.д.). Для перестройки порядка коров он может только попросить "префикс" своих коров четной длины сделать реверс. "Префикс" состоит из диапазона коров от первой коровы до \(j\)-ой коровы для некоторой позиции \(j\).

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

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

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

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

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

Выведите минимальное количество реверсов.

У Фермера Джона есть \(N\) (\(1\leq N \leq 10^5\)) стогов из тюков сена. Для каждого \(i\in [1,N]\), \(i\)-ый стог имеет \(h_i\) (\(1\le h_i\le 10^9\)) тюков. Бесси может выполнять следующие операции:

  • Если высоты двух соседних стогов сена различаются не более чем на \(K\) (\(1\le K\le 10^9\)), она может поменять местами два стога

Какую лексикографически минимальную последовательность высот Беси может получить после некоторой последовательности таких операций?

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

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

Первая строка ввода содержит \(N\) и \(K\). \(i+1\)-ая строка содержит высоту \(i\)-того стога.

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

Выведите \(N\) строк, \(i\)-ая строка содержит высоту \(i\)-го стога в решении.

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

Имеется массив отсортированных чисел \(x_1 \leq x_2 \leq \dotsb \leq x_N\) (\(1 \leq N \leq 10^5\)), и целое число \(K\). Вы не знаете массив или \(K\) но Вы знаете для каждого индекса \(i\), наибольший индекс \(j_i\) такой, что \(x_{j_i} \leq x_i + K\). Гарантируется, что \(i\le j_i\) и \(j_1\le j_2\le \cdots \le j_N\le N\).

По заданной информации коровы ФД должны сконструировать любой массив, который соответствует данной информации для некоторого целого \(K\). Конструкция должна удовлетворять условию \(0 \leq x_i \leq 10^{18}\) для всех \(i\) и \(1 \leq K \leq 10^{18}\).

Можно доказать, что это всегда возможно. Помогите коровам ФД решить эту задачу.

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

Первая строка ввода содержит \(N\). Следующая строка содержит \(j_1,j_2,\ldots,j_N\).

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

Выведите \(K\), затем \(x_1,\ldots,x_N\) на отдельных строках. Любой корректный вывод будет принят.

SCORING:

  • Для 50% всех тестов, \(N\le 5000\)
  • Для оставшихся тестов нет дополнительных ограничений.

Автор: Danny Mittal

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\).

Коровы играют с двумя игральными костями X и Y. Побеждает та кость, на которой больше очков. Если выпало одинаковое число, кости бросаются повторно, пока не выпадут разные числа. Мы говорим, что кость X бьёт кость Y, если более вероятно, что кость X выиграет у Y.

Рассмотрим 4-гранные кости

Кость A имеет числа 4, 5, 6, 7 на своих гранях.

Кость B имеет числа 2, 4, 5, 10 на своих гранях.

Кость C имеет числа 1, 4, 8, 9 на своих гранях.

Эти кости удовлетворяют довольно интересному свойству: A бьёт B, B бьёт C, C бьёт A. В частности, ни одна из этих костей не является "наилучшей", бьющёй две других. В этом случае, когда ни одна из трёх костей не является "наилучшей" и нет двух костей с олинаковой вероятностью победить, мы называем множество из таких трёх костей "не-транзитивным".

Вам дали числа на гранях двух 4-гранных костей A и B. Помогите коровам определить, есть ли способ назначить числа на гранях третьей кости С так, чтобы множество стало "не-транзитивным". Числа на всех гранях всех костей - целые в интервале от 1 до 10 включительно.

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

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

Каждая из следующих \(T\) строк описывает один тест 8 числами: 4 числа на гранях кости A и 4 числа на гранях кости B. Все числа от 1 до 10, не обязательно в отсортированном порядке. Одно и тоже число может появиться несколько раз, даже на одной кости.

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

Выведите \(T\) строк. \(k\)-ая строка должна быть 'yes' если возможно спроектировать C, чтобы сделать множество "не-транзитивным", иначе вывести 'no'.

Herdle#90163
Коровы создали новый вид пазлов, который назвали Herdle.

Каждый день они выпускают новый пазл. Пазл представляет собой решётку 3*3, гже каждая клетка занята коровой определённой породы. Всего имеется 26 различных видов пород, которые представляются большими латинским буквами от A до Z. Играющий должен узнать тип породы в каждой клетке через серию запросов. В каждом запросе от представляет 3*3 латинских букв. Ответ формируется следующим образом: если буквы угаданы, они подсвечиваются зелёным, Буквы верной породы, но не на своём месте подсвечиваются жёлтым.

Количество подсвеченных указывает, сколько их должно быть. Например, предположим, что гипотеза содержит 4 символа A, а правильный ответ содержит только 2 символа A, причём ни одна позиция не угадана. Тогда в ответе на этот запрос только 2 символа A будут подсвечены жёлтым. В общем случае, если \(x\) коров определённой породы в запросе и только \(y\) - в правильном ответе (не считая коров, которые уже стоят на своём месте и будут подсвечены зелёным), только \(y\) из этих \(x\) коров будут подсвечены жёлтым.

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

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

Первые 3 строки ввода содержат решётку, представляющую правильный ответ. Слеующие 3 строки представляют запрос.

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

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

Drought#90162

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

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

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

Каждый ввод состоит из нескольких независимых тестов, каждый из которых нужно решить правильно, чтобы решить полностью входной тест. Первая строка содержит \(T\) (\(1\le T\le 100\)) - количество тестов на вводе. Каждый тест описывается парой строк. Первая строка в паре содержит \(N\), а вторая - \(h_1,h_2,\ldots,h_N\). Гарантируется, что сумма всех \(N\) в тесте не превысит \(10^5\). Значения \(N\) могут различаться внутри ввода.

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

Выведите \(T\) строк, по одной для каждого теста на вводе.

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

Фермер Джон реорганизует свою электронную почту. Его экран выглядит как вертикальный список папок с левой стороны экрана и и вертикальный список писем с право стороны экрана. Имеется \(M\) папок, пронумерованных \(1 \ldots M\) (\(1 \le M \le 10^4)\). Его почта сейчас содержит \(N\) писем, пронумерованных \(1\ldots N\) (\(1 \le N \le 10^5\)); \(i\)-ое письмо необходимо переместить в папку \(f_i\) (\(1\le f_i\le M\)).

Экран ФД небольшой, поэтому он может видеть одновременно \(K\) (\(1\le K\le \min(N,M)\)) папок и \(K\) писем одновременно. Изначально, его экран показывает папки \(1 \ldots K\) слева и письма \(1 \ldots K\) справа. Для того чтобы увидеть другие папки и письма, он должен скроллить соответствующие списки. Например, если он проскроллит вниз на одну позицию в списке папок, он увидит папки \(2 \ldots K+1\), а если проскроллит ещё на одну позицию вниз, он увидит папки \(3 \ldots K+2\). Когда ФД переносит письмо в папку, оно исчезает из списка писем, и все нижние письма поднимаются на одну позицию вверх. Например, пусть на экране отображены письма \(1, 2, 3, 4, 5\) и ФД переносит письмо 3 в соответствующую папку, тогда видимая часть списка писем станет такой: \(1, 2, 4, 5, 6\). ФД может переносить письма только в назначенные им папки.

К несчастью, колесо скроллинга на мышке ФД сломалось, и он может скроллить только вниз и не может скроллить вверх. Единственное подобие скроллинга вверх если он видит последние \(K\) писем из своего списка и переносит в папку одно из них. В этом случае после переноса список опять покажет последние \(K\) ещё не разнесенных писем, что соответствует скроллингу вверх на одно письмо. Если осталось менее \(K\) писем, они отображаются все.

Помогите ФД определить, может ли он разнести по папкам все свои письма.

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

Первая строка ввода содержит \(T\) (\(1 \le T \le 10\)), количество подслучаев в тесте, каждый из которых должен решаться независимо. Далее идут \(T\) подслучаев. Для каждого подслучая первая строка содержит \(M\), \(N\), \(K\). Вторая строка содержит \(f_1 \ldots f_N\).

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

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

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

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

\(i\)-ая корова размещена в точке \((x_i,y_i)\), где \(0 \leq x_i \leq 10^6\) \(0 \leq y_i \leq 10\). Стоимость построения коммуникационной линии между коровами \(i\) и \(j\) есть квадрат расстояния между ними: \((x_i-x_j)^2 + (y_i-y_j)^2\).

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

**Замечание : Лимитна время на тест = 4s, в дфа раза больше обычного..**

Формат ввода (с клавиатуры / stdin):

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

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

Выведите минимальную стоимость сети, которая позволит коммуницировать всем коровам. Заметим, что стоимость может быть очень большой, и может потребовать 64-битную целую типа "long long" в C++.

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

ФД это заметил и попросил Эльзу вести учёт засыпаний Беси. Всего имеется \(N\) (\(1\le N\le 10^5\)) периодов, когда проходили занятия. И Эльза записала, что Беси засыпала \(a_i\) (\(0\le a_i\le 10^6\)) раз во время \(i\)-го периода. Общее количество засыпаний Беси не превышает \(10^6\).

Эльза хочет показать ФД, что Беси всегда засыпала одинаковое количество раз. Но единственный способ, которым она это может сделать - объединить два соседних периода проведения занятий. Например, если \(a=[1,2,3,4,5],\) то Эльза может объединить второй и третий периоды и лог станет таким \([1,5,4,5]\).

Помогите Эльзе вычислить минимальное количество модификаций лога, которые она должна сделать, чтобы сделать все числа лога равными.

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

Каждый ввод содержит \(T\) (\(1\le T\le 10\)) тестов, которые нужно решать независимо.

Первая строка содержит \(T\) - количество тестов. Затем следуют \(T\) тестов, каждый описывается парой строк. Первая строка пары содержит \(N\), а вторая содержит \(a_1,a_2,\ldots,a_N\).

Гарантируется, что внутри каждого теста сумма всех \(a_i\) не превышает \(10^6\). Также гарантируется, что сумма всех \(N\) в этих тестах не превысит \(10^5\).

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

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

Фермер Джон выстроил в ряд своих \(N\) коров для фотографии.

Изначально коровы выстроились в порядке \(a_1,a_2,\ldots,a_N\) слева направо. Цель ФД выстроить их в порядке \(b_1,\ldots,b_N\) слева направо. Чтобы достичь своей цели, ФД может выполнить несколько модификаций порядка. Каждая модификация состоит в том, чтобы выбрать корову и переместить её влево на некоторое количество позиций.

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

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

Первая строка ввода содержит \(N\). Вторая строка содержит \(a_1,a_2,\ldots,a_N\). Третья строка содержит \(b_1,b_2,\ldots,b_N\).

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

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

Blocks#90150
У Беси есть 4 деревянных кубика. На каждой из 6 сторон каждого кубика написана одна буква.

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

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

Первая строка ввода содержит \(N\) (\(1\le N\le 10\)), количество слов, которые Беси хочет составить. Каждая из следующих 4 строк содержат строку из 6 символов - больших английских букв, представляющих буквы на сторонах кубика. Следующий \(N\) строк содержат \(N\) слов, которые Беси хочет составлять. Каждое слово имеет длину от 1 до 4 букв (больших английских).

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

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

У Беси есть массив \(a_1, \ldots, a_N\), где \(1 \leq N \leq 300\) и \(0 \leq a_i \leq 10^9\) для всех \(i\). Она не хочет сообщать Вам сам массив \(a\), но может отвечать на ваши запросы то есть для каждой пары индексов \(i \leq j\), Беси скажет Вам \(r_{i, j} = \max a[i\ldots j] - \min a[i\ldots j]\). По заданным значениям \(r\) сконструируйте массив, который мог бы быть оригинальным массивом Беси. Значения в этом массиве должны быть в интервале \([-10^9, 10^9]\).

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

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

Далее следуют \(N\) строк. \(i\)-ая из этих строк содержит число \(r_{i, i}, r_{i, i + 1}, \ldots, r_{i, N}\).

Гарантируется, что существует некоторый массив с числами в интервале \([0, 10^9]\) такой, что для всех \(i \leq j\), \(r_{i, j} = \max a[i\ldots j] - \min a[i\ldots j]\).

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

Выведите одну строку, содержащую \(N\) целых чисел \(b_1, b_2, \ldots, b_N\) в интервале \([-10^9, 10^9]\) представляющих Ваш массив. Они должны удовлетворять \(r_{i, j} = \max b[i\ldots j] - \min b[i\ldots j]\) для всех \(i \leq j\).

Mountains#90142
**Обратите внимание: время на тест для этой задачи 5s, в 2.5 раза больше, чем обычно. Предельный размер памяти также увеличен в два раза по сравнению с умолчанием.

Имеется \(N\) (\(1 \leq N \leq 2000\)) гор в ряд на ферме Джона Это может быть выражено как массив высот \(h_1,h_2,\dots,h_N\). Для горы \(i\), Вы можете увидеть другую гору \(j\) если нет гор строго выше чем линия взгляда, соединяющая горы \(j\) и \(i\). Формально, для двух гор \(i < j\), они могут видеть друг друга, если не существует такого \(k\) \(i < k < j\) и \((k, h_k)\) выше чем отрезок, соединяющий \((i, h_i)\) и \((j, h_j)\). Имеется \(Q\) (\(1 \leq Q \leq 2000\)) изменений высот, когда высота одной горы возрастает. Определите общее количество неупорядоченных пар гор, которые могут видеть друг друга после каждого изменения.

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

Строка \(1\) содержит \(N\).

Строка \(2\) содержит \(N\) высот \(h_1,h_2,\dots,h_N\) (для каждого \(i\), \(0 \leq h_i \leq 10^9\)).

Строка \(3\) содержит \(Q\).

Строки \(4\) - \(3+Q\) содержат \(x\), \(y\) (\(1 \leq x \leq N\), \(1 \leq y\)) где \(x\) индекс горы, \(y\) - величина на которую эта гора возрастает. Гарантируется, что новая высота горы не превысит \(10^9\).

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

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

ПРМЕР ВВОДА:

5
2 4 3 1 5
3
4 3
1 3
3 2
Беси хочет посмотреть Bovine Genomics: The Documentary, но она не хочет идти одна. К сожалению, её друзья не очень хотят идти с ней. Ей нужно чем то их привлечь. У неё есть два инструмента : mooney и мороженое.

У Беси \(N\) (\(1 \le N \le 2000\)) друзей. Однако они разные! Друг \(i\) имеет счёт популярности \(P_i\) (\(1 \le P_i \le 2000\)), и Беси хочет максимизировать сумму популярности друзей, которые пойдут с ней. Друг \(i\) пойдёт с ней только если она даст ему \(C_i\) (\(1 \le C_i \le 2000\)) "moonies". Друг \(i\) также может сделать скидку в \(1\) "mooney", если она даст ему \(X_i\) (\(1 \le X_i \le 2000\)) мороженых. Беси может получить сколько угодно скидок.

У Беси есть \(A\) moonies и \(B\) мороженых (\(0 \le A, B \le 2000\)). Помогите ей определить максимальную сумму популярностей, которую она может добиться, если потратит mooney и мороженое оптмально.

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

Строка \(1\) содержит три числа \(N\), \(A\), \(B\), представляющих количества друзей, mooney и мороженых, которые есть у Беси соответственно.

Каждая из последующих \(N\) строк содержит три числа \(P_i\), \(C_i\), \(X_i\), представляющих популярность (\(P_i\)), mooney, за которые он согласится пойти, количество мороженых для скидки в \(1\) mooney для друга \(i\) (\(X_i\)).

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

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

У Эльзы есть программа, которая получает на ввод массив из \(N\) (\(1\le N\le 100\)) переменных \(b[0],\dots,b[N-1]\), каждая из которых равна 0 или 1 и возвращает результат применяя последовательность операторов if / else if / else, указанную на вводе. Каждый оператор проверяет значение не более одной переменной и возвращает 0 или 1. Примером такой программы может быть:

if (b[1] == 1) return 1;
else if (b[0] == 0) return 0;
else return 1;

Например, если ввод в эту программу есть "10" (то есть, \(b[0] = 1\) и \(b[1] = 0\)), тогда вывод должен быть 1

Эльза должна сказать правильный ответ для \(M\) (\(1\le M\le 100\)) различных вводов. Бесси сейчас пытается сделать "реверс инжиниринг" для программы Эльзы. К несчастью, Эльза может и солгать - то есть не существует программы вида указанного выше, которая выведет ответы как сказала Эльза.

Для каждого из \(T\) (\(1\le T\le 10\)) подтестов определит, лгала Эльза или нет.

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

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

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

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

Для каждого тесты выведите "OK" или "LIE" на отдельной строке.

У Фермера Джона имеется \(N\) (\(1 \le {N} \le {10^5}\)) коров, каждая из которых имеет породу или Guernsey(G) или Holstein(H). Они выстроились в ряд заняв позиции \(1\dots N\).

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

Каждая корова готова пройти не более \(K\) (\(0 \le {K} \le N-1\)) позиций чтобы добраться до пакета с травой. Определите минимальное количество пакетов с травой, необходимое чтобы накормить всех коров. Любая конфигурация, удовлетворяющая указанным выше ограничениям, будет рассматриваться как корректная.

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

Каждый тест состоит из \(T\) подтестов, описывающих расположение коров. Первая строка сдержит \(T\) (\(1 \le T \le 10\)). Далее следует \(T\) подтестов.

Каждый подтест начинается со строки содержащей \(N\) и \(K\). Следующая строка содержит строку длины \(N\), в которой каждый символ обозначает породу коровы на позиции \(i\) (G или H).

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

Для каждого из \(T\) подтестов выведите две строки. В первой строке выведите минимальное количество пакетов с травой, которые требуются. Во второй строке нужно вывести строку из \(N\) символов, которая описывает Ваше решение. \(i\)-ый символ этой строки указывает что нужно разместить в позиции \(i\): '.' - ничего 'G' - пакет с травой типа G 'H' - пакет с травой типа H Любая корректная конфигурация будет принята.

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