Алгоритмы

918 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Left Out#90083
Фермер Джон снова фотографирует своих коров.

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

RLR
RRL
LLR

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

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

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

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

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

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

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

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

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

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

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

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

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

Valleys#90080

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

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

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

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

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

Примеры

Это регион:

oo.
ooo
..o

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

oo.
oo.
..o

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

ooo
o..
o..

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

ooo
o.o
ooo

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

ooo
o.o
oo.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#include "grader.h"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор: Spencer Compton

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Фермер Джон пытается отсортировать свои \(N\) коров (\(1 \leq N \leq 100\)), последовательно пронумерованных \(1 \dots N\).

В настоящий момент коровы выстроились в линию в порядке \(p_1, p_2, p_3, \dots, p_N\), и ФД стоит перед коровой \(p_1\). Он хочет переупорядочить коров так, чтобы они стали в порядке \(1, 2, 3, \dots, N\), с коровой \(1\) перед ФД.

Фермера Джона слышит только корова, которая стоит перед ним. В этот момент ФД может сказать ей перейти на \(k\) позиций назад (\(k\) в интервале \(1 \ldots N-1\).). \(k\) коров, которых она проходит , двигаются вперёд, освобождая место для неё, в которое она и становится.

Например, пусть \(N=4\) и коровы стоят в таком порядке

 ФД: 4, 3, 2, 1 

Единственная корова, которая слышит ФД, это корова \(4\). Если он скажет ей сдвинуться на 2 позиции, порядок станет таким:

 ФД: 3, 2, 4, 1 

Теперь ФД слышит только корова \(3\). Теперь ей можно давать инструкцию и т.д.

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

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

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

Вторая строка ввода содержит \(N\) разделённых пробелом целых чисел, \(p_1, p_2, p_3, \dots, p_N\), указывающих начальное размещение коров.

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

Одно целое число - минимальное количество команд, которые должен дать ФД чтобы отсортировать всех коров.

Корова Беси со своей подружкой Эльзой любят играть в следующую игру.

Сначала Беси кладёт три перевёрнутые ракушки на стол и маленький круглый камешек под одну из них. Затем Беси меняет пары ракушек, а Эльза пытается угадать где камешек.

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

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

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

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

Первая строка входного файла содержит целое число \(N\), задающее количество обменов (\(1 \leq N \leq 100\)). Каждая из последующих \(N\) строк описывает шаг игры и содержит три целых числа \(a\), \(b\), \(g\), указывающих, что ракушки \(a\) и \(b\) обмениваются Беси, а затем Эльза говорит, что после обмена камешек находится под ракушкой \(g\). Все эти три целых числа принимают одно из значений 1, 2, 3 и \(a \neq b\).

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

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

Bessie и Эльза любя также играть в игру "угадай животное".

Сначала Беси задумывает некоторое животное. Затем Эльза задаёт серию вопросов, чтобы угадать, какое животное задумала Беси. На каждый вопрос Беси отвечает "Да" или "Нет". Например:

Эльза: "Животное летает?" 
Беси: "Нет" 
Эльза: "Ест траву" 
Беси: "Да" 
Эльза: "Даёт молоко?"
Беси: "Да" 
Эльза: "Делает му-у?"
Беси: "Да" 
Эльза: "Корова." 
Беси: "Точно!"

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

Вам даны все животные, которых знают Беси и Эльза и их характеристики. Определите максимальное количество ответов "Да", которые может получить Эльза, прежде чем она узнает задуманное животное.

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

Первая строка ввода содержит количество животных, \(N\) (\(2 \leq N \leq 100\)). Каждая из последующих \(N\) строк описывает животное. Строка начинается с названия животного, затем идёт целое число \(K\) (\(1 \leq K \leq 100\)), и затем \(K\) характеристик этого животного. Названия и характеристики животных это строки из маленьких латинских букв (a..z), длиной не более 20 символов. Никакие два животных не имеют полностью совпадающие характеристики.

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

Выведите максимальное количество ответов "Да", которые Эльза может получить прежде чем игра закончится.

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

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

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

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

Первая строка ввода содержит \(N\) и \(K\) (\(1 \leq K \leq N \leq 10^5\)). Каждая из оставшихся \(N\) строк содержит четыре целых числа \(x_1, y_1, x_2, y_2\) описывающих прямоугольный регион, который зарисовали левым нижним углом \((x_1, y_1)\) и правым верхним углом \((x_2, y_2)\). Все величины \(x\) и \(y\) находятся в интервале \(0 \ldots 1000\), все прямоугольники имеют положительную площадь.

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

Выведите площадь амбара, которая покрыта ровно \(K\) слоями краски.

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

Беси решила воспользоваться им для поиска партнёра. Он создала аккаунт и получила список из \(N\) возможных соответствий (\(1\leq N \leq 10^6\)). Беси оценила, что каждый бык имеет вероятность \(p_i\) (\(0<p_i<1\)) согласиться на её приглашение на танец.

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

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

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 10^6\)). Каждая из оставшихся строк содержит \(10^6\) умноженное на \(p_i\), что является целым числом.

Как минимум для 25% тестов гарантировано \(N \leq 4000\).

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

Выведите умноженную на \(10^6\) вероятность получить ровно одно принятое приглашение округлённую вниз до ближайшего целого числа.

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

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

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

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

Первая строка ввода содержит \(N\) и \(K\) (\(1 \leq K, N \leq 10^5\)). Каждая из оставшихся \(N\) строк содержит четыре целых числа \(x_1, y_1, x_2, y_2\) описывающих прямоугольный регион левым нижним углом \((x_1, y_1)\) и правым верхним углом \((x_2, y_2)\). Все величины \(x\) и \(y\) в интервале \(0 \ldots 200\), и все прямоугольники имеют положительную площадь.

Как и уже нарисованные прямоугольники, новые должны иметь положительную площадь, а координаты их углов \(x\) и \(y\) должны быть в интервале \(0 \ldots 200\).

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

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

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

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

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

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

Первая строка ввода содержит \(N\) (\(2 \leq N \leq 100\)) и \(M\) (\(1 \leq M \leq 150\)). Каждая из последующих \(M\) строк содержит два целых числа в интервале \(1 \ldots N\), описывающих пару любимых пастбищ соответствующей коровы.

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

Выведите число из N цифр, каждая цифра которого в интервале \(1 \ldots 4\), описывающее тип травы, которую нужно посадить на соответствующем пастбище. Первая цифра описывает тип травы на пастбище 1, вторая - на пастбище 2 и т.д. Если возможно несколько решений, выведите такое, что соответствующее число из \(N\) цифр минимальное.

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

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

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

По заданным показаниям \(N\) датчиков, определите наиболее точно диапазоны, описывающие движение на шоссе от мили 1 к миле \(N\). Эти диапазоны должны не противоречить показаниям всех \(N\) датчиков.

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

Первая строка содержит число \(N\) (\(1 \leq N \leq 100\)). Каждая из оставшихся \(N\) строк описывает одномильный сегмент дороги в порядке от мили 1 к миле \(N\). Каждая строка сначала содержит символы "on" (если это сегмент с пандусом для въезда), "off" (если это сегмент с пандусом для выезда), "none", если сегмент не содержит пандусов, за которыми следуют два целых числа в интервале \(0 \ldots 1000\), описывающих интервал, показанный соответствующим датчиком. Если сегмент с пандусом - считывается показание с датчика на пандусе, иначе - с датчика на шоссе. Как минимум для одного датчика будет указано "none".

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

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

ФОРМАТ ВВОДА:

4
on 1 1
none 10 14
none 11 15
off 2 3

ФОРМАТ ВЫВОДА:

10 13
8 12

В этом примере, комбинация считываний датчиков с сегментов 2 и 3 сужает интервал до \([11, 14]\), поскольку только показания в этом интервале соответствуют обоим считываниям \([10,14]\) и \([11,15]\). На миле 1 ровно значение 1 представляет входящий трафик, поэтому входящий трафик может быть в диапазоне \([10, 13]\). На миле 4 от 2 до 3 единиц потока может покинуть трафик, поэтому выходной поток после мили 4 может быть \([8,12]\).

Автор: Brian Dean

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

\(M\) друзей ФД (\(1 \leq M \leq 10^5\)) часто его посещают. Во время визита друга \(i\), ФД вместе с ним путешествует по уникальному пути от фермы \(A_i\) до фермы \(B_i\) (возможно \(A_i = B_i\)). Дополнительно, они пробуют молоко каждой коровы на своём пути. Поскольку друзья ФД также фермеры, они имеют сильное предпочтение по молоку. Каждый из них пьёт молоко только определённого типа коров. Любой из друзей ФД будет счастливым, только если сможет попить свой предпочитаемый тип молока во время пути.

Определите для каждого друга, будет ли он счастливым.

ОЦЕНИВАНИЕ:

  • Тест 2 второй пример, приведенный ниже.
  • Тест 3 удовлетворяет \(N\le 10^3, M\le 2\cdot 10^3\).
  • Тесты 4-7 удовлетворяют \(C_i\le 10\) (\(C_i\) определено ниже).

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

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

Вторая строка ввода содержит \(N\) разделённых целых чисел \(T_1,T_2,\ldots, T_N\). Тип коровы на \(i\)-ой ферме обозначен \(T_i\).

Каждая из последующих \(N-1\) строк содержит два различных целых числа \(X\) и \(Y\) (\(1 \leq X, Y \leq N\)), указывающих, что имеется дорожка между фермами \(X\) и \(Y\).

Последующие \(M\) строк содержат целые числа \(A_i\), \(B_i\), \(C_i\). \(A_i\) и \(B_i\) представляют конечные точки пути во время визита \(i\)-ого друга, \(C_i\) (\(1\le C_i\le N\)) указывает тип молока, предпочитаемый этим другом.

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

Выведите двоичную строку длины \(M\). \(i\)-ый символ этой строки должен быть '1', если \(i\)-ый друг будет счастлив, иначе - '0'.

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