В рамках Чемпионата Урала планируется проведение турнира стратегий по игре «Морской бой 1D».
Игра проходит на поле, которое представляет собой прямоугольник размером 1 × N клеток. На поле расставляются T кораблей, каждый из которых имеет вид прямоугольника размером 1 × K клеток. Расстановка кораблей на поле является допустимой, если различные корабли не имеют общих клеток и разделены хотя бы одной пустой клеткой. Игровая программа осуществляет выстрелы в клетки поля, а сервер сообщает, является ли выстрел промахом или попаданием в корабль.
В процессе игры про некоторые клетки становится известно, что при любой допустимой расстановке кораблей они принадлежат какому-либо из кораблей. Назовём такие клетки заведомо занятыми.
Игра заканчивается после первого попадания в корабль. Сервер пытается добиться того, чтобы игра продолжалась как можно дольше. Для этого он не фиксирует расстановку кораблей в начале игры, а рассматривает все возможные допустимые расстановки и сообщает о попадании, только если клетка, в которую осуществляется выстрел, является заведомо занятой.
Требуется написать программу, исполняющую роль сервера для этой игры. Сервер сначала загружает параметры игры, а затем взаимодействует с игровой программой, сообщая после каждого выстрела информацию о промахе или попадании, а также количество заведомо занятых клеток.
Задача является интерактивной. После каждого вывода требуется сбросить буфер вывода.
Роль игровой программы исполняет программа жюри. Программа-решение исполняет роль сервера.
Первая строка стандартного ввода программы-решения содержит параметры игры — три числа: N — размер игрового поля, T — число кораблей и K — длина каждого корабля (1 ≤ N ≤ 100 000, 1 ≤ T, 1 ≤ K). Гарантируется, что на поле длины N можно по описанным правилам разместить T кораблей длины K.
После считывания параметров игры программа-решение должна определить и вывести в стандартный поток вывода количество заведомо занятых клеток.
Затем начинается игра. Программа-решение должна последовательно считывать ходы игровой программы из стандартного потока ввода и обрабатывать их следующим образом:
Данная задача содержит четыре подзадачи. Для оценки каждой подзадачи используется своя группа тестов. Баллы за подзадачу начисляются только в том случае, если все тесты из этой группы успешно пройдены.
8 2 3 4 1
4 0 5 1
В выборах председателя школьного клуба информатиков участвуют K кандидатов и N избирателей. Кандидаты пронумерованы от 1 до K, избиратели — от 1 до N.
По результатам голосования составляется список, i-й элемент этого списка равен номеру кандидата, за которого проголосовал i-й избиратель. Для каждого отрезка списка назначается наблюдатель, который подсчитывает голоса на этом отрезке. Таким образом, на выборах работают N(N + 1) / 2 наблюдателей.
Если наблюдатель обнаружит кандидата, набравшего на его отрезке более половины голосов, он публикует в социальной сети прогноз о том, что этот кандидат победит в выборах.
Требуется написать программу, которая по списку голосов определяет количество опубликованных наблюдателями прогнозов.
Первая строка входного файла содержит два числа N и K (1 ≤ N ≤ 500 000, 1 ≤ K ≤ 500 000). Вторая строка содержит N чисел V1, V2, ..., VN — список голосов избирателей (1 ≤ Vi ≤ K).
Выходной файл должен содержать единственное число — количество прогнозов.
Для окончательной проверки решений этой задачи используются 50 тестов. Тесты оцениваются независимо. Каждый тест оценивается в 2 балла. Значения N и K в тестах приведены в таблице.
Тест | N | K | Тест | N | K | Тест | N | K |
1 | 2 | 2 | 18 | 2000 | 20 | 35 | 90000 | 1000 |
2 | 3 | 1 | 19 | 3000 | 2000 | 36 | 100000 | 5000 |
3 | 5 | 5 | 20 | 5000 | 2000 | 37 | 125000 | 1 |
4 | 10 | 10 | 21 | 7500 | 200 | 38 | 150000 | 12000 |
5 | 20 | 2 | 22 | 10000 | 10000 | 39 | 150000 | 18 |
6 | 30 | 3 | 23 | 15000 | 1500 | 40 | 200000 | 42000 |
7 | 50 | 20 | 24 | 20000 | 10 | 41 | 250000 | 26000 |
8 | 75 | 75 | 25 | 25000 | 100 | 42 | 300000 | 10000 |
9 | 100 | 2000 | 26 | 30000 | 15 | 43 | 350000 | 102000 |
10 | 150 | 30 | 27 | 35000 | 35 | 44 | 400000 | 12000 |
11 | 200 | 50 | 28 | 40000 | 10000 | 45 | 450000 | 5000 |
12 | 300 | 10 | 29 | 45000 | 10000 | 46 | 500000 | 2 |
13 | 400 | 100 | 30 | 50000 | 10000 | 47 | 500000 | 102000 |
14 | 500 | 2 | 31 | 55000 | 13000 | 48 | 500000 | 102000 |
15 | 300 | 200 | 32 | 60000 | 174 | 49 | 500000 | 102000 |
16 | 1000 | 2000 | 33 | 70000 | 10000 | 50 | 500000 | 501 |
17 | 1500 | 100 | 34 | 80000 | 1000 |
5 2 1 2 1 2 1
9
3 7 5 2 6
3
Для участников олимпиады на главной площади города «У» планируется игра в форме флешмоба. Главная площадь замощена плитками, образующими клетчатое поле.
Сначала составляется план игры: каждый участник флешмоба получает номер в очереди выхода на площадь и координаты двух различных плиток, находящихся в одном ряду или столбце. После этого на площади раскладываются призы, затем участники выходят на площадь по очереди. Очередной участник забирает все призы, находящиеся в указанных ему клетках, и клетках, находящихся между ними.
Призы должны быть разложены так, чтобы каждому участнику достался по крайней мере один приз.
Требуется написать программу, которая по плану игры находит минимальное необходимое количество призов, и на какие именно плитки их следует разложить.
В первой строке входного файла содержится число N — количество участников флешмоба (1 ≤ N ≤ 123 456). Каждая из последующих N строк содержит четыре целых числа x1i, y1i, x2i, y2i — координаты плиток для i-го участника (1 ≤ x1i, y1i, x2i, y2i ≤ 109; либо x1i = x2i, либо y1i = y2i). Участники перечислены в порядке выхода на площадь.
Первая строка выходного файла должна содержать число M — минимальное количество призов, которые должны быть разложены на площади. Каждая из последующих M строк должна содержать два числа pxi и pyi — координаты плитки, на которой должен лежать i-й приз.
Если вариантов размещения призов, удовлетворяющих условию задачи, несколько, то выведите любой из них. Если решения не существует, выведите единственное число 0.
Данная задача содержит четыре подзадачи. Для оценки каждой подзадачи используется своя группа тестов. Баллы за подзадачу начисляются только в том случае, если все тесты из этой группы успешно пройдены.
5 2 1 2 4 2 4 4 4 5 1 1 1 4 4 4 2 4 2 1 2
5 1 2 4 3 1 1 3 4 2 3
3 1 1 1 3 2 1 2 3 1 2 2 2
0
4 1 1 1 3 2 1 2 3 3 3 3 1 1 3 4 3
4 4 3 3 1 2 1 1 1