Информатика

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

У Фермера Джона N коров (1 <= N <= 1000) выстроены в ряд. У каждой коровы имеется ID породы. У коровы с номером i, ID породы B(i).
ФД думает, что его ряд коров выглядел бы более впечатляюще, если бы он имел как можно более длинный непрерывный блок коров с одинаковым ID коровы. Для того, чтобы создать такой блок, ФД решил удалить из своего ряда всех коров, имеющих конкретный ID породы, который он выберет.
Помогите ФД определить длину наибольшего непрерывного блока коров с одинаковым ID, который он может получить, удалив всех коров с некоторым ID, который выберет ФД.

PROBLEM NAME: cowrow
Формат входных данных
* Строка 1: Целое число N.
* Строки 2..1+N: Строка i+1 содержит B(i), целое число в диапазоне 0...1,000,000.
Формат выходных данных
* Строка 1: Наибольший размер непрерывного блока коров, с одинаковым ID коровы, который он может создать.


Примечание
При удалении всех коров с ID=3, ФД может получить ряд 2, 7, 7, 7, 7, 5, 7. В этому ряду максимальный непрерывный блок состоит из 4 коров с ID 7.


Определите минимальное количество символов в строке из круглых скобок, которые нужно заменить на противоположный ( левую скобку на правую, или наоборот) , чтобы получить сбалансированную строку.
Существует несколько способов определить сбалансированную строку скобок. Например, такой: В строке должно быть одинаковое количество левых и правых скобок, и для любого ее префикса количество левых скобок должно быть не меньше, чем количество правых скобок.
Например, эти строки - сбалансированные () (()) ()(()())
А эти - нет: )( ())( ((())))
PROBLEM NAME: clumsy
Формат входных данных
* Строка 1: строка из скобок длиной не более 100,000 символов.


Формат выходных данных
* Строка 1: Одно целое число - минимальное количество скобок, которые нужно "переключить" , чтобы конвертировать заданную строку в сбалансированную.


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


Коровы Фермера Джона различаются по породам и каждая корова помечена гигантским пятном на боку в виде круглой скобки. В зависимости от направления, в котором смотрит корова, эта скобка может быть левой или правой скобкой.
Однажды утром ФД организовал своих коров в K строк по N коров в каждой строке (1 <= K <= 10, 1 <= N <= 50,000). Коровы смотрят в произвольных направлениях, поэтому построение может быть описано как K строк из N символов-скобок. Назовем эти строки S1, S2, :, SK. ФД заметил, что некоторые диапазоны коров "параллельно сбалансированы". Диапазон i..j коров называется "параллельно сьалансированным" тогда и только тогда, когда строки S1,S2,:,SK сбалансированы в этом диапазоне. Например, если K=3 и у нас есть 3 строки
S1 = )()((())))(()) S2 = ()(()()()((()) S3 = )))(()()))(()) 1111 01234567890123
Тогда диапазон [3:8] параллельно сбалансирован, поскольку S1[3...8] = ((())) S2[3...8] = ()()() S3[3...8] = (()())
Диапазоны [10...13] и [11...12] также параллельно сбалансированы.
Ваша задача - посчитать количество сбалансированных диапазонов для заданных K строк длины N.
Строка S называется сбалансированной, если количество левых скобок равно количеству правых и для любого префикса этой строки количество левых скобок не меньше чем количество правых скобок.
Например эти строки сбалансированы () (()) ()(()())
А эти - нет: )( ())( ((())))
PROBLEM NAME: cbs
Формат входных данных
* Строка 1: Два целых числа, K и N.
* Строки 2..K+1: Каждая строка содержит N скобок.
Формат выходных данных
* Строка 1: Одно целое число - количество сбалансированных диапазонов

Ферма Джона - гигантское дерево из N пастбищ (1 <= N <= 40,000), каждое из которых помечено символом ( или символом ).
Например:
'('--'('--')'--'('--')' | | ')' ')'--'('--'(' | | ')' '('--')'--')'--')'--'('
Поскольку ферма дерево - то некоторые пары пастбищ соединены дорожками, так что существует уникальный путь между любыми двумя парами пастбищ. Некоторые из этих путей представляют сбалансированные строки скобок. Теперь ФД хочет узнать какова максимальная глубина вложенности среди всех сбалансированных строк представляющих эти пути.
Максимальной глубиной вложенности сбалансированной строки скобок называется максимальное превышение количества левых скобок над правыми среди всех префиксов этой строки. Например, для строки ()()() максимальная глубина вложенности - 1, а для строки ((()))() максимальная глубина вложенности - 3:
((()))() 12321010
Для примера фермы, представленного выше "наиглубокая" строка есть ((())), ее глубина равна 3, а строка получается по пути из A в B:
'('--'('--')'--'('--')' | | ')' ')'--'('--'(' < A | | ')' '('--')'--')'--')'--'(' ^C ^B
Заметим, что она отличается от самой длинной сбалансированной строки (())(()), которая начинается в A, заканчивается в C и имеет длину 8.
Ваша задача - вывести максимальную глубину вложенности среди путей на данном дереве.
PROBLEM NAME: btree
Формат входных данных
* Строка 1: Одно целое число N, количество вершин в дереве.
* Строки 2..N: Строка i+1: Одно целое число p_(i+1) (1 <= p_(i+1) <= i), означающее, что существует ребро между вершинами I+1 и P_(I+1) в этом дереве.
* Строки N+1..2N: Строка N+i: Или ( или ), метка вершины i.
Формат выходных данных
* Строка 1: Одно целое число - максимальная глубина вложенности среди всех сбалансированных путей
Typo#89844

Беси только что купила новый лэптоп. Однако ей неудобно работать с клавиатурой, поэтому она набирает строки из круглых скобок. Она может ошибиться и набрать ( вместо ) и наоборот.
Посчитайте количество мест в строке таких, что замена одной скобки на противоположную в этом месте сделает строку сбалансированной.
Есть несколько способов определить, что такое "сбалансированная" строка скобок. Например, так: 1) Всего должно быть одинаковое количество левых ( и правых ) скобок и для любого префикса этой строки, левых скобок должно быть не меньше чем правых.
Следующие строки сбалансированы () (()) ()(()())
А эти - нет:
)( ())( ((())))
PROBLEM NAME: typo
Формат входных данных
* Строка 1: строка из скобок с длиной N (1 <= N <= 100,000).
Формат выходных данных
* Line 1: количество позиций в этой строке, (если они вообще есть), таких, что замена одной скобки на противоположную в этой позиции приведет к тому, что строка станет сбалансированной.
Примечание
Для исходной строки:
12345678 ()(())))
Замена скобки в позиции 2 приводит к такой сбалансированной строке
12345678 (((())))
Аналогично сбалансированные строки получается при замене скобок в позициях 5, 6, и 7.

Еще Беси уважает "совершенно сбалансированные строки", в которых за строкой из левых скобок следует строка их правых скобок такой же длины.
(((())))
Имеется двумерный массив из N*N символов ( и ). Начиная с левого верхнего угла массива нужно пройти, выбирая символы так, чтобы построенная строка была совершенно сбалансированной и имела максимальную длину.
На каждом шагу можно двигаться вверх, вниз, влево или вправо, но нельзя заходить в одну и ту же клетку более одного раза. Можно зайти не во все клетки.
PROBLEM NAME: hshoe
Формат входных данных
* Строка 1: Целое число N (2 <= N <= 5).
* Строки 2..N+1: Каждая строка содержит строку из N скобок. Все вместе эти строки описывают решетку N*N.
Формат выходных данных
* Line 1:Длина наибольшей совершенно сбалансированной строки. Если Беси не может построить совершенно сбалансированную строку например, если левый верхний угол содержит символ )., то выведите 0.


Примечание
Последовательность шагов, которую нужно выполнить, чтобы получит ответ 8 такова: 1()) 2)(( 345( 876)

нн
Беси сбежала и прячется на холме, покрытом высокой травой. Фермер Джон, пытаясь поймать Беси решил ползти по траве на руках и коленях, так чтобы подобраться незамеченным.
Трава перед Фермером Джоном выглядит как строка из N круглых скобок (1 <= N <= 50,000), например
)((()())())
Фермер джон знает, что задние ноги Беси выглядят как две соседних левых скобок ((, а пара ее передних ног выглядит, как пара соседних праваых скобок )). Поэтому местоположение Бес,и может быть описано парой индексов x < y таких, что (( находятся на позиции x, а )) находятся на позиции y.
Вычислите количество различных позиций, в которых может находится Беси.
PROBLEM NAME: cowfind
Формат входных данных
* Строка 1: строка из скобок, длиной N (1 <= N <= 50,000).
Формат выходных данных
* Строка 1: Количество позиций, в которых Беси может стоять (то есть количество таких различных пар (x,y), что x < y и (( стоят на позиции x, а )) стоят на позиции y )


Примечание
Всего имеется четыре варианта расположения Беси, они указаны ниже:
1. )((()())()) ^^ ^^
2. )((()())()) ^^ ^^
3. )((()())()) ^^ ^^
4. )((()())()) ^^ ^^

Tractor#89841

Фермер Джон оставил свой трактор в середине поля. Коровы решили подшутить над ФД. Они разместили N стогов сена (1 <= N <=50,000) в различных участках поля, так что ФД не может забрать трактор не удалив некоторые из них.
Местоположение трактора и стогов сена - это точки на декартовой плоскости с целочисленными координатами от 1 до 1000. Нет стогов сена в позиции трактора. Трактор ФД может двигаться только параллельно осям координат (на север, юг, запад и восток) на целое количество единиц. Трактор не может проходить через точку, в которой имеется стог сена.
Пожалуйста, помогите ФД определить минимальное количество стогов сена, которые придется убрать, чтобы он мог привести трактор в начало координат.
PROBLEM NAME: tractor
Формат входных данных
* Строка 1: Три разделенных пробелом целых числа N x y (x,y) - начальные координаты трактора
* Строки 2..1+N: Каждая строка содержит (x,y)-координаты стога сена


Формат выходных данных
* Строка 1: Минимальное количество стогов сена, которое ФД должен удалить для того, чтобы обеспечить путь своему трактору к началу координат.
Примечание
Достаточно удалить только 1 стог.


Фермер Джон строит сад. Сад состоит из последовательности из N цветочниц (1 <= N <= 100). Каждая цветочница изначально содержит Ai цветов. ФД хочет изменить сад таким образом, чтобы каждая цветочница стала содержать Bi цветов. Ai и Bi - числа от 0 до 10.
ФД может делать следующее - купить цветок за X долларов и добавить его в любую цветочницу - убрать цветок из любой цветочницы и это стоит Y долларов - переместить цветок из цветочницы i в цветочницу j за цену Z * abs(i-j) долларов
Вычислите минимальную цену выполнения реорганизации сада.

PROBLEM NAME: landscape
Формат входных данных
* Строка 1: Разделенные пробелом целые числа N, X, Y, Z (0 <= X, Y, Z <= 1000).
* Строки 2..1+N: Строка i+1 содержит разделенные пробелом целые числа Ai и Bi.
Формат выходных данных
* Строка 1: Одно целое число - минимальная стоимость реорганизации сада.


Примечание
Один цветок нужно продать (с цветочницы 4), за цену 200. Остальные цветки можно переместить за цену 10 (3 цветка с цветочницы 4 на цветочницу 1 и 1 цветок с цветочницы 3 на цветочницу 2)


Фермер Джон заказал большое количество пакетов с сеном. Он хочет разложить их в N кучек (1 <= N <= 100,000), расположенных по кругу, где куча i содержит Bi пакетов с сеном. Водитель грузовика разложил пакеты в N куч с Ai пакетов в каждой. Известно, что сумма Bi равна сумме Ai.
ФД хочет переместить кучи из их текущего положения Ai в требуемое BI. X единиц работы требуется, чтобы переместить один пакет из кучи в другую, которая отстоит на X шагов от данной по кругу.
Определите минимальное количество работы, требуемое для преобразования "хаоса" в "порядок".

PROBLEM NAME: restack
Формат входных данных
* Строка 1: Одно целое число N.
* Строки 2..1+N: Строка i+1 содержит два целых числа Ai и Bi (1 <= Ai, Bi <= 1000).
Формат выходных данных
Примечание
Минимальное количество работы, которое надо совершить, равно 13: переместить 6 пакетов из кучи 1 в кучу 4, переместить 1 пакет из кучи 3 в кучу 2, переместить 6 пакетов из кучи 3 в кучу 4.


Фермер Джон купил программируемый трактор. Чтобы заставить трактор двигаться, он пишет строку длиной N (1 <= N <= 100,000), состоящую только из символов F, L, R. Символ 'F' заставляет трактор двигаться на единицу вперед, символы 'L' и 'R' заставляют трактор повернуться на 90 градусов влево или вправо, соответственно. Трактор начинает движение в точке (0,0) глядя на север.
ФД знает, что он ошибся ровно в одном символе. Например, он мог набрать 'F' или 'L' вместо 'R' в некотором месте. Но он не помнит точно в каком месте он ошибся.
Пожалуйста, вычислите количество различных точек на плоскости, в которых может оказаться трактор в результате выполнения этой программы (направление в конечной позиции не играет роли).
PROBLEM NAME: wrongdir
Формат входных данных
* Строка 1: Строка ФД

Формат выходных данных
* Строка 1: Количество позиций, в которых может оказаться трактор, если ФД ошибся в каком-то одном символе.
Примечание
Всего имеется 4 возможных ошибочных последовательности: FL, FR, LF, RF.
И при их выполнении трактор оказывается в точках (0,1), (0,1), (-1,0), (1,0) соответственно. Всего 3 различных точки.

Times 17#89834

Фермер Джон осознал, что разработка программного обеспечения - это прибыльный бизнес и решил писать маленькие программы местного значения.
Его первая программа такая простая: его клиент хочет, чтобы он ввел число N и вывел 17*N, при этом оба числа должны быть в двоичной системе счисления и число N может иметь до 1000 цифр.
PROBLEM NAME: times17
Формат входных данных
* Строка 1: Двоичное представление числа N (не более 1000 цифр).
Формат выходных данных
* Строка 1: Двоичное представление N*17.
Примечание
Двоичное число 10110111 равно 183 десятичное. 183 x 17 = 3111, а это 110000100111 в двоичном виде.

Каждый день Фермер Джон обходит свою ферму, чтобы проведать N (1 <= N <= 10) своих коров.
Местоположение каждой из его коров описывается точкой на координатной плоскости, а ФД начинает в точке (0,0). Чтобы сделать маршрут более интересным, ФД ходит только параллельно осям координат (на север, юг, восток и запад). Он меняет направление своего движения, только когда он добирается до одной из коров. Если пожелает, он может не менять направление своего движения, проходя через местоположение коровы. Когда ФД меняет направление движения, он может менять его на 90 или 180 градусов. ФД должен вернутся в исходную точку после посещения всех коров.
Пожалуйста, вычислите общее количество способов, которыми ФД может посетить всех своих коров, если он изменит направление своего движения ровно один раз у каждой коровы. Не изменяя направление движения, он может ходить мимо коровы произвольное количество раз. Один и тот же геометрический путь, пройденный в прямом и обратном направлениях, считается как два различных маршрута.
PROBLEM NAME: connect
Формат входных данных
* Строка 1: Целое число N.
* Строки 2..1+N: Строка i+1 содержит x и y координаты (разделенные пробелом) для i-ой точки(все числа в диапазоне -1000...1000).
Формат выходных данных
* Строка 1: Количество различных маршрутов ФД (может быть равным 0, если их нет)


Примечание
Всего есть два различных маршрута 1-2-4-3 или 3-4-2-1 прежде чем ФД вернется в точку (0,0).


Фермер Джон обнаружил, что его коровы дают больше молока, если занимаются спортом. Поэтому он послал N (1 <= N <= 25,000) своих коров взобраться на ближайшую гору и вернуться обратно.
Корове I требуется U(i) времени взобраться на гору и D(i) времени, чтобы спуститься с нее. Каждой корове нужна помощь человека, а их всего два ФД и его кузен фермер Дон (ФДо). ФД будет помогать коровам подниматься, а ФДо - спускаться. Поэтому в любой момент времени только одна корова будет подыматься (с помощью ФД) и не более одной коровы - спускаться (с помощью ФДо).
Группа коров может временно находится на вершине горы, если они туда взобрались, и ждут помощи от ФДо чтобы спуститься. Коровы могут спускаться в порядке, отличном от того, в котором они подымались.
Определите минимальное количество времени, которое требуется всем коровам, чтобы совершить полное путешествие туда и обратно.
PROBLEM NAME: climb
Формат входных данных
* Строка 1: Количество коров, N.
* Строки 2..1+N: Строка i+1 содержит два разделенных пробелом целых числа: U(i) и D(i). (1 <= U(i), D(i) <= 50,000).
Формат выходных данных
* Строка 1: Одно целое число, представляющее минимальное количество времени, которое требуется всем коровам взобраться на гору и вернуться обратно.
Примечание
Если корова 3 пойдет первой, затем корова 1 и затем корова 2 (и в таком же порядке возвращаться), это и даст суммарное время 17.

Деньги кончились, и теперь ферма Джона имеет размер 5*5 метров. Поле (1,1) находится в левом верхнем углу, поле (5,5) - в правом нижнем.
(1,1) (1,2) (1,3) (1,4) (1,5) (2,1) (2,2) (2,3) (2,4) (2,5) (3,1) (3,2) (3,3) (3,4) (3,5) (4,1) (4,2) (4,3) (4,4) (4,5) (5,1) (5,2) (5,3) (5,4) (5,5)
Каждый квадрат этой решетки содержит траву, кроме K выжженных Квадратов (0 <= K <= 22, K четное) квадратов, где нет травы. Беси начинает пастись в квадрате (1,1), в котором всегда есть трава. Милдред начинает пастись в клетке (5,5), где тоже всегда есть трава.
Каждые полчаса Беси и Милдред съедают всю траву в своем квадрате и переходят в соседний квадрат (на север, юг, запад или восток). Они хотят съесть всю траву и встретиться в общей финальной позиции. Пожалуйста, вычислите количество различных способов сделать это. Беси и Милдред всегда двигаются только в квадрат с травой и никогда не идут в один и тот же квадрат, если это не самый последний квадрат с травой.
PROBLEM NAME: grazing
Формат входных данных
* Строка 1: Целое число K.
* Строки 2..1+K: Каждая строка содержит координаты (I,j) клетки без травы - два целых числа I и J через пробел.

Формат выходных данных
Строка 1: Количество различных способов Беси и Милдред пройти по полю, съесть всю траву и встретиться в одной и той же клетке.
Примечание
Есть только один способ - встретиться в клетке (3,5), пройдя указанными на рисунке ниже маршрутами
b b--b b--b | | | | | b--b b--b b | x x x x b/m | m--m--m--m--m | m--m--m--m--m

Gifts#89824

Фермер Джон хочет сделать подарки своим N (1 <= N <= 1000) коровам, используя свой бюджет в B (1 <= B <= 1,000,000,000) единиц денег.
Корова I требует подарка с ценой P(i) единиц ценой доставки S(i) (поэтому для ФД будет стоить P(i)+S(i) заказать этот подарок). У ФД есть специальный купон, который он может использовать чтобы заказать подарок за полцены. Если ФД использует этот купон для коровы I, то он должен будет заплатить только P(i)/2 + S(i). По соглашению, все P(i) четные числа.
Пожалуйста, помогите ФД определить максимальное количество коров, которым он сможет сделать подарки.
PROBLEM NAME: gifts
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N и B.
* Строки 2..1+N: Строка i+1 содержит два разделенных пробелом целых числа, P(i) и S(i). (0 <= P(i),S(i) <= 1,000,000,000, P(i)- четное)
Формат выходных данных
* Строка 1: Максимальное количество коров, которым ФД может купить подарки.
Примечание
ФД может купить подарки для коров с первой по 4-ую, если он использует Купон для коровы 3. Потраченная сумма будет: (4+2)+(2+0)+(4+1)+(6+3) = 22. Заметим, что ФД альтернативно может использовать купон для коров 1 или 4 И все равно не превысить бюджет.

Фермер Джон купил новую машину, которая умеет садить траву в прямоугольном регионе со сторонами, параллельными осям координат. К несчастью, эта машина однажды сломалась и посадила траву не в одном, а в N (1 <= N <= 1000) различных регионах, некоторые из которых могут даже перекрываться.
По заданным прямоугольным регионам, засаженным травой, помогите ФД определить общую площадь, покрытую травой.
PROBLEM NAME: planting
Формат входных данных
* Строка 1: Целое число N.
* Строки 2..1+N: Каждая строка содержит четыре разделенных одиночными пробелами целых числа x1 y1 x2 y2 указывающих прямоугольный регион с верхним - левым углом (x1,y1) и нижним – правым углом (x2,y2). Все координаты – целые числа в диапазоне -10^8...10^8..
Формат выходных данных
* Строка 1: Общая площадь, покрытая травой. Заметим, что общая площадь может быть настолько большой, что не поместиться в 32-битное целое.
Cow IDs#89821

Фермер Джон пометил всех своих коров двоичными числами. Однако не любыми, а только такими, в которых ровно K единиц. (1<=K<=10). Конечно, лидирующий бит каждой метки равен 1. ФД назначает метки в порядке возрастания чисел, начиная от самой маленькой корректной метки (K-битного числа, состоящего из всех единиц). Теперь он нуждается в Вашей помощи: определите N-ую метку, которую он должен назначить (1 <= N <= 10^7).
PROBLEM NAME: cowids
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N и K.
Формат выходных данныхдвоичное число

Фермер Джон хочет купить новых коров! На продаже имеется N (1 <= N <= 50,000) коров, а у ФД может потратить не более, чем M (1 <= M <=10^14) единиц денег. Корова I стоит Pi денег (1 <= Pi <= 10^9). У ФД имеется K купонов (1<=K<=N). Когда он использует купон для покупки коровы I, то цена будет Ci вместо Pi (1<=Ci<=Pi). Для каждой коровы ФД должен использовать ровно один купон.
Какое максимальное количество коров может купить ФД?
PROBLEM NAME: coupons
Формат входных данных
* Строка 1: Три разделенных пробелом целых числа: N, K, M.
* Строки 2..N+1: Срока i+1 содержит два целых числа: Pi Ci.
Формат выходных данных
* Строка 1: Одно целое число, максимальное количество коров, которое может купить ФД.
Примечание
ФД использует купон при покупке коровы 3 и купит коров 1, 2, 3 за цену 3 + 2 + 1 = 6.

У Фермера Джона есть длинная веревка длины L (1 <= L <= 10,000), которую он использует на ферме. На веревке завязаны N (2 <= N <= 100) узлов на различных расстояниях, в том числе на обоих концах.
ФД заметил, что имеются определенные точки на веревке, в которой он может перегнуть веревку назад, так что узлы на обоих частях веревки станут точно рядом друг с другом.

Пожалуйста, помогите ФД посчитать количество точек перегиба, в которых соблюдается это свойство. Допускается складывание веревки в любом из узлов (кроме начала и конца веревки). Лишние узлы на более длинной части веревки не принимаются во внимание (то есть необходимо обеспечить выравнивание узлов в области, где есть обе части веревки). Делать можно только одно складывание за один раз. ФД не умеет складывать веревку много раз.
PROBLEM NAME: folding
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N и L.
* Строки 2..1+N: Каждая строка содержит одно целое число в интервале 0...L Указывающее расположение одного узла. Две из этих строк будут всегда 0 и L.
Формат выходных данных
* Строка 1: Количество корректных позиций перегиба веревки.
Примечание
Корректные позиции перегиба 1, 2, 3, 8.
Поделиться
Класснуть