2017-2018 ACM-ICPC Квалификационный этап Четвертьфинала Московского подрегиона NEERC
A. Problem Order
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Перед тем, как задачи Moscow Programming Contest были отправлены в печать, жюри упорядочило задачи по возрастанию сложности, так что эта задача — самая простая, а задача K — самая сложная.

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

Подсчитайте, сколько раз Алиса грустно вздохнёт во время просмотра собранной Бобом стопки.

Входные данные

На вход подаётся список названий задач в этом контесте в том порядке, в котором они даны в наборе.

Выходные данные

Выведите одно число — количество раз, которое вздохнёт Алиса.

Пример
Входные данные
Problem Order
Interactor
Signals in the Space
PalINTdromes
Ugly Polyomino
Robot in the Maze
DHCP Troubles
Array Test
Favorite Points
Thorny Graph
Xor and Segments
Выходные данные
3
Примечание

Ответ к примеру неверен и приведён только для того, чтобы проиллюстрировать формат ввода-вывода.

B. Interactor
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Лена руководит разработкой тестирующей системы, в которой реализованы интерактивные задачи.

До заверщения очередной стадии проекта осталось написать модуль, определяющий итоговый вердикт системы для интерактивной задачи. Итоговый вердикт определяется из кода завершения задачи, вердикта интерактора и вердикта чекера по следующим правилам:

  • Вердикт чекера и вердикт интерактора — это целые числа от 0 до 7 включительно.
  • Код завершения задачи — это целое число от -128 до 127 включительно.
  • Если интерактор выдал вердикт 0, итоговый вердикт равен 3 в случае, если программа завершилась с ненулевым кодом, и вердикту чекера в противном случае.
  • Если интерактор выдал вердикт 1, итоговый вердикт равен вердикту чекера.
  • Если интерактор выдал вердикт 4, итоговый вердикт равен 3 в случае, если программа завершилась с ненулевым кодом, и 4 в противном случае.
  • Если интерактор выдал вердикт 6, итоговый вердикт равен 0.
  • Если интерактор выдал вердикт 7, итоговый вердикт равен 1.
  • В остальных случаях итоговый вердикт равен вердикту интерактора.

Ваша задача — реализовать этот модуль.

Входные данные

Входной файл состоит из трёх строк. В первой задано целое число r ( - 128 ≤ r ≤ 127) — код завершения задачи, во второй — целое число i (0 ≤ i ≤ 7) — вердикт интерактора, в третьей — целое число c (0 ≤ c ≤ 7) — вердикт чекера.

Выходные данные

Выведите одно целое число от 0 до 7 включительно — итоговый вердикт системы.

Примеры
Входные данные
0
0
0
Выходные данные
0
Входные данные
-1
0
1
Выходные данные
3
Входные данные
42
1
6
Выходные данные
6
Входные данные
44
7
4
Выходные данные
1
Входные данные
1
4
0
Выходные данные
3
Входные данные
-3
2
4
Выходные данные
2

C. Signals in the Space
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Межзвёздная автоматическая станция передала на Землю закодированное тестовое сообщение, состоящее из N сигналов — целых неотрицательных чисел, не превосходящих 255 (числа в сообщении могут повторяться). Но из-за ошибки в программе с принимающей стороны числа в сообщении были переставлены, а из-за зашумлённости канала связи некоторые сигналы были распознаны некорректно.

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

Входные данные

Первая строка входных данных содержит одно целое число N — длину сообщения (1 ≤ N ≤ 1000).

Во второй строке через пробел перечислены N целых неотрицательных чисел, не превосходящих 255 — отправленные станцией сигналы.

В третьей строке через пробел перечислены N целых неотрицательных чисел, не превосходящих 255 — принятые на Земле сигналы.

Выходные данные

Выведите одно целое число — наименьшее количество сигналов, которые были распознаны некорректно.

Примеры
Входные данные
5
1 2 3 4 5
5 2 3 1 4
Выходные данные
0
Входные данные
5
1 1 1 1 1
1 2 3 4 5
Выходные данные
4

D. PalINTdromes
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Число является существенно палиндромическим в системе счисления с основанием b ≥ 2, если запись этого числа в соответствующей системе без ведущих нулей состоит более, чем из одной цифры и является палиндромом.

Например, число 5 является существенно палиндромическим в системе счисления с основанием 2 (запись 101 является палиндромом), а числа 1 и 2 — не являются (запись 10 палиндромом не является, а запись числа 1 состоит из одной цифры); число 901684 является существенно палиндромическим в системе счисления с основанием 99 (так как 901684 = 99·99·91 + 99·98 + 91, то число состоит из цифр (91) в первом разряде, (98) во втором и (91) в третьем и тем самым запись является палиндромом).

По заданному числу n требуется найти максимальное целое число b ≥ 2 такое, что в системе счисления с основанием b число n является существенно палиндромическим.

Входные данные

Входные данные содержат одно целое число n (3 ≤ n ≤ 109). Гарантируется, что входные данные подобраны таким образом, что ответ всегда существует.

Выходные данные

Выведите максимальное основание b системы счисления, в которой число n является существенно палиндромическим.

Пример
Входные данные
3
Выходные данные
2

E. Ugly Polyomino
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

Например, полный набор 3-полимино состоит из двух фигур,

а полный набор 4-полимино состоит из пяти фигур.

У Алёны есть полный набор n-полимино. Она считает некрасивыми все полимино, содержащие квадрат 2 × 2. По заданному n определите количество некрасивых полимино.

Входные данные

Первая строка входа содержит одно целое число n — параметр набора полимино (3 ≤ n ≤ 7).

Выходные данные

Выведите одно целое число — количество некрасивых n-полимино.

Примеры
Входные данные
3
Выходные данные
0
Входные данные
4
Выходные данные
1
Примечание

Так как в квадрате 2 × 2 4 клетки, а в 3-полимино 3 клетки, то ни одно 3-полимино не содержит квадрата 2 × 2.

Единственным 4-полимино, содержащим квадрат 2 × 2, является сам квадрат 2 × 2.

F. Robot in the Maze
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В некоторых комнатах лабиринта n × n расставлены указатели «север», «юг», «запад» и «восток». Остальные комнаты пусты. Робот стартует с некоторого поля и следует по указателям до тех пор, пока не выйдет из лабиринта или не попадёт на поле, в котором нет указателя. Стены в лабиринте отсуствуют, то есть робот может перейти на любое соседнее по стороне поле (или выйти из лабиринта, если он пошёл с края доски в соответствующую сторону).

Требуется выяснить, что произойдёт с роботом: зациклится ли он, покинет ли доску или придёт на какое-то свободное поле доски (в этом случае требуется указать, на какое именно).

Входные данные

Первая строка входных данных содержит одно целое число n, задающее размер лабиринта (1 ≤ n ≤ 100).

Каждая из последующих n строк состоит из n символов, каждый символ описывает одну комнату. Если символ равен 'N', двигаться надо на север, если символ равен 'E' — на восток, если символ равен 'S' — на юг, если символ равен 'W' — на запад, если символ равен '.', то в комнате нет указателя. Первая строка является самой северной, первый столбец — самым западным.

В последней строке содержатся два целых числа R и C (1 ≤ R, C ≤ n) — номер (начиная с единицы) строки и столбца комнаты, из которой стартует робот.

Выходные данные

Если робот в результате движения по стрелке выходит из лабиринта, выведите 0, если он зацикливается, выведите  - 1, если он останавливается в какой-то комнате внутри лабиринта, выведите два целых числа — номер (начиная с 1) строки и столбца комнаты, в которой остановится робот.

Примеры
Входные данные
5
NNNNN
WEESE
EN.SE
WNWWE
SSSSS
3 3
Выходные данные
3 3
Входные данные
5
NNNNN
WEESE
EN.SE
WNWWE
SSSSS
2 2
Выходные данные
-1
Входные данные
5
NNNNN
WEESE
EN.SE
WNWWE
SSSSS
3 1
Выходные данные
-1
Входные данные
5
NNNNN
WEESE
EN.SE
WNWWE
SSSSS
1 3
Выходные данные
0

G. DHCP troubles
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

...Во время межпланетных сборов программистов в институте Космической Гавани на планете Латакония случилось непредвиденное: в предназначенной для участников сборов подсети обнаружилась нехватка свободных IP-адресов. Прибывший с Земли системный администратор Дмитрий просканировал логи роутера, обнаружил список адресов подключенных устройств и поручил Вам по маске подсети и списку встречающихся в логе подключения адресов выяснить, сколько адресов в данной подсети свободно. Заметим, что роутер обслуживает не только интересующую нас подсеть, а также что один и тот же адрес может упоминаться в логах многократно.

Подсеть задаётся базовым IP-адресом и маской подсети.

  • Базовый IP-адрес представляет собой 32-битовое целое число и задаётся как набор из 4 целых чисел от 0 до 255 включительно, записываемых через точку (например, "129.1.3.17"). Первое число соответствует старшему байту ip-адреса, последнее — самому младшему. То есть записи "129.1.3.17" соответствует двоичное число 10000001 00000001 00000011 00010001.
  • Маска подсети M представляет собой целое число от 0 до 31 и обозначает количество старших бит IP-адреса, являющихся постоянными для всех адресов в данной подсети. То есть адрес принадлежит данной подсети тогда и только тогда, когда старшие M бит адреса и маски подсети совпадают.

    Маска подсети записывается через наклонную черту сразу после базового адреса. Например, "129.1.3.17/28". В данном случае маска равна 28, то есть подсеть включает в себя все IP-адреса с фиксированными 28 старшими битами 10000001 00000001 00000011 0001 (то есть адреса от "129.1.3.16" до "129.1.3.31" ).

  • При этом существуют два специальных IP-адреса, которые не могут быть назначены: наибольший адрес (где в маске нулевые биты — в нём стоят единицы) соответствует широковещательному адресу, наименьший — адресу самой подсети (где в маске нулевые биты — в нём стоят нулевые биты). В случае с подсетью "129.1.3.17/28" это адреса "129.1.3.16" и "129.1.3.31", тем самым до подключения первого устройства всего в этой подсети доступны 14 адресов.
Входные данные

Первая строка входных данных. задаёт подсеть в формате, описанном в условии задачи. Все числа в IP-адресе и маска подсети не содержат в записи ведущих нулей.

Во второй строке входных данных задано одно целое число N (1 ≤ N ≤ 100) — количество устройств, подключенных к роутеру. Каждая из последующих N строк содержит один IP-адрес, записанный в стандартном формате — упоминание подключенного к роутеру устройства в логе. Гарантируется, что все IP-адреса корректны.

Выходные данные

Выведите одно целое число — количество свободных IP-адресов в заданной подсети. В случае, если в логах роутера обнаружены адрес или широковещательный адрес заданной подсети, то в конфигурации системы есть какая-то ошибка и надо вывести  - 1.

Примеры
Входные данные
129.1.3.17/28
2
129.1.3.17
129.1.3.15
Выходные данные
13
Входные данные
129.1.3.17/24
4
129.1.3.255
127.0.0.1
129.1.3.18
129.1.3.255
Выходные данные
-1

H. Array Test
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

Напомним несколько классических определений. Пусть дан массив A из n целых чисел [a1, a2, ..., an]. Последовательность [b1, b2, ..., bm] будет называть подмассивом данного массива, если существует такое l, 1 ≤ l ≤ n - m + 1, что al = b1, al + 1 = b2, ..., al + m - 1 = bm.

Разные массивы даже одинаковой длины могут иметь разное количество непустых подмассивов. Например, массив [1, 1, 1] имеет три различных подмассива ([1], [1, 1], [1, 1, 1]), в то время как массив [1, 2, 3] - шесть ([1], [1, 2], [1, 2, 3], [2], [2, 3], [3]).

Массивы можно сравнивать лексикографически. Массив C = [c1, c2, ..., ck] лексикографически меньше массива D = [d1, d2, ..., dl], если выполнено одно из двух условий:

  1. Массив C короче массива D и является его префиксом, то есть k < l, и при этом c1 = d1, c2 = d2, ..., ck = dk;
  2. В первой позиции, в которой они отличаются, у массива C стоит меньший элемент, то есть существует такое целое положительное p ≤ min(k, l), что c1 = d1, c2 = d2, ..., cp - 1 = dp - 1 и cp < dp.

А вот и условие задачи. Пусть дан массив A = [a1, a2, ..., an] и целое положительное число k. Упорядочим все подмассивы А в лексикографическом порядке. Какой подмассив идёт в полученном упорядоченном списке k-м?

Входные данные

В первой строке записаны числа n и k (1 ≤ n ≤ 1 000 000, 1 ≤ k ≤ 30) — длина последовательности. Во второй строке записано n целых чисел, по модулю не превосходящих 106.

Выходные данные

Выведите искомый подмассив, либо  - 1, если такого подмассива не существует.

Примеры
Входные данные
5 6
5 4 3 1 2
Выходные данные
3 1 2 
Входные данные
4 5
3 3 3 3
Выходные данные
-1

I. Favorite Points
ограничение по времени на тест
6 секунд
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Преподаватель Д. любит давать контрольные работы. Вот и завтра он очень хочет дать контрольную работу по геометрии.

Для формулировки очередной задачи Д. необходимо задать параллелограмм, ромб, квадрат и трапецию. У Д. есть список из n любимых точек; Д. хочет выбрать каждый из четырехугольников так, чтобы все его вершины были любимыми точками, а четырехугольники - невырожденными. Однако от обилия вариантов разбегались глаза, и было непонятно, с чего начинать выбор. Д., как принято в таких случаях, просит Вас написать программу, которая по списку любимых точек найдет четыре числа — количество способов выбрать параллелограмм, ромб, квадрат и трапецию.

Д. любезно напоминает, что выпуклый четырехугольник ABCD является:

  • параллелограммом, если отрезок AB параллелен отрезку CD и AD параллелен BC;
  • ромбом, если |AB| = |BC| = |CD| = |DA|;
  • квадратом, если |AB| = |BC| и все четыре угла четырехугольника равны;
  • трапецией, если AB параллелен CD и AD НЕ параллелен BC, либо AD параллелен BC и AB НЕ параллелен CD.
Входные данные

В первой строке записано натуральное число n, 4 ≤ n ≤ 1000 — количество любимых точек Д. . В последующих n строках записано по два целых числа, не превосходящих по модулю 108 — координаты x и y точек. Гарантируется, что все точки попарно различны.

Выходные данные

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

Примеры
Входные данные
4
0 0
0 1
1 0
1 1
Выходные данные
Parallelograms: 1
Rhombuses: 1
Squares: 1
Trapezoids: 0
Входные данные
6
0 0
0 1
0 2
1 0
1 1
1 2
Выходные данные
Parallelograms: 5
Rhombuses: 2
Squares: 2
Trapezoids: 4

J. Thorny Graph
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Как гласят старые малоярославские легенды, где-то далеко-далеко, где сборная России когда-то готовилась к международной олимпиаде, в одной из общеобразовательных школ живёт Граф. Ориентированность Графа, как следует из легенд, меняется от дня ко дню вместе с количеством вершин и ребер, что позволяет Графине и её отражению не скучать и играть во множество игр на Графе.

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

Напомним, что последовательность ребер (u1, u2), (u2, u3), ..., (uk - 1, uk), (uk, u1) является простым циклом, если вершины u1, u2, ..., uk попарно различны. Простой цикл проходит через ребро e, если ребро e содержится в последовательности ребер цикла.

Петлёй в графе называется ребро (u, v), т.ч. u = v.

Рёбра (u1, v1) и (u2, v2) называются кратными, если u1 = u2 и v1 = v2.

Помогите Графине понять, является ли её Граф, являющийся ориентированным графом без петель и кратных ребер, колючим или нет.

Входные данные

В первой строке записаны целые неотрицательные числа n и m (1 ≤ n ≤ 500 000, 0 ≤ m ≤ 106 - количество вершин и рёбер графа-Графа.

Далее в следующих m строках записано по паре целых чисел u, v, 1 ≤ u, v ≤ n, u ≠ v.

Гарантируется, что в Графе не существует петель и кратных ребер.

Выходные данные

Выведите слово "YES", если Граф является колючим, и "NO" иначе.

Примеры
Входные данные
3 3
1 2
2 3
3 1
Выходные данные
YES
Входные данные
3 4
1 2
2 3
3 1
1 3
Выходные данные
NO

K. Xor and segments
ограничение по времени на тест
2.5 секунд
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Дан массив a1, a2, ..., an, каждое ai равняется 0 или 1. Напишите программу, которая умеет выполнять две операции:

  1. по заданным числам l и r (1 ≤ l ≤ r ≤ n) меняет каждое из чисел al, al + 1, ..., ar на противоположное (0 на 1, 1 на 0);
  2. для заданных чисел l и r, (1 ≤ l ≤ r ≤ n) рассматривает все подотрезки массива длиной от l до r, вычисляет для каждого из них сумму чисел на этом подотрезке, возвращает остаток от деления этой суммы по всем подходящим подотрезкам на 2. Формально, вычисляется величина:
    .
Входные данные

В первой строке записаны числа n и q (1 ≤ n, q ≤ 250 000).

Во второй строке записаны n чисел a1, a2, ..., an, каждое из этих чисел равно 0 или 1.

В следующих q строках расположены параметры запросов. В i-й из этих строк записаны параметры i-го запроса — числа ti, li и ri, где ti равно 1 для запроса первого типа (замена чисел в массиве) и 2 для запроса второго типа (нахождение суммы), а li и ri, 1 ≤ li ≤ ri ≤ n есть параметры соответствующего запроса.

Выходные данные

Для каждого запроса второго типа выведите в отдельной строке единственное число — ответ на соответствующий запрос.

Пример
Входные данные
5 10
0 0 0 0 0
1 2 4
2 2 2
2 1 1
2 1 2
2 2 3
1 3 5
2 2 2
2 3 3
2 2 4
2 1 5
Выходные данные
0
1
1
1
1
1
1
1