Открытое личное первенство ИКИТ СФУ по программированию 2017. Студенты
A. Ближайшее нечётное
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Дано целое чётное число $$$X$$$. Вывести для него ближайшее нечётное число. Если вариантов несколько, то вывести то, которое короче в десятичной записи. Если вариантов все равно несколько, вывести то, которое меньше.

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

В единственной строке содержится целое число $$$X$$$ ($$$|X| \leq 10^6$$$).

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

Ближайшее нечётное число, удовлетворяющее условию задачи.

Примеры
Входные данные
10
Выходные данные
9
Входные данные
6
Выходные данные
5
Входные данные
-4
Выходные данные
-5
Примечание

Минус также считается символом десятичной записи.

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

Вы сидите на вершине дерева с небольшой командой выживших в центре бобро-зомби апокалипсиса.

На земле вас окружили N бобров-зомби, которые вот-вот сточат ствол дерева!

У каждого бобра-зомби есть свой размер si, выраженный натуральным числом.

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

Последними словами учёного было уточнение, что если размер Бобротрона будет квадратом целого числа, то он будет на вашей стороне, вселит ужас в остальных бобров-зомби и заставит их убежать!

Срочно посчитайте, сколькими способами можно создать доброго Бобротрона, стравливая двух бобров-зомби!

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

Первая строка ввода содержит целое число N — количество бобров-зомби (2 ≤ N ≤ 200 000).

Вторая строка содержит N целых чисел si, разделённых пробелами — размеры бобров-зомби (1 ≤ si ≤ 200 000).

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

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

Примеры
Входные данные
4
1 4 9 16
Выходные данные
6
Входные данные
4
2 4 6 8
Выходные данные
1
Примечание

В первом примере подойдёт любая пара бобров.

Во втором примере подойдёт лишь пара бобров с размерами 2 и 8.

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

CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных.

Описание формата:

Каждая строка файла — это одна строка таблицы. Строки не могут быть пустыми. Каждая строка заканчивается символом перевода строки.

aaa,bbb,ccc

xxx,yyy,zzz

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

aaa,a and b,bbb

aaa,,ccc,ddd

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

aaa,"bbb","c , c"

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

"aaa","a ""and"" b"

Ваша задача — написать программу, которая будет читать данные в CSV формате и выводить их на печать в отформатированном виде.

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

Файл в CSV формате, содержащий не более 100 непустых строк. Каждая строка содержит не более 100 символов. Допустимые символы: строчные и прописные латинские буквы, цифры, знаки препинания (точка, запятая, вопросительный и восклицательный знак, двоеточие, точка с запятой, двойные кавычки) и пробелы.

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

Выведите информацию из файла, отформатированную по следующим правилам:

Каждая строка содержит одинаковое количество ячеек. Строки могут дополняться справа необходимым количеством пустых ячеек.

Ширина каждого столбца подбирается автоматически по ширине самого длинного значения.

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

Разделитель между ячейками в строке — вертикальная черта «|».

Пример
Входные данные
a,b,c,d,e
"aa",,"cc",dd
"a,a,a","b,b","c"
"a,""a"",""","a and ""b""",,a"b
Выходные данные
a      |b        |c |d  |e
aa | |cc|dd |
a,a,a |b,b |c | |
a,"a","|a and "b"| |a"b|

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

Гиптопод Поликарп — существо, прибывшее то ли из будущего, то ли из другого измерения, предоставил человечеству какой-то аппарат, который является то ли квантовым компьютером, то ли вечным двигателем.

Точнее, пока лишь он предоставил схему этого аппарата. На схеме присутствуют N точек и M каналов. Каждый канал соединяет ровно две точки и имеет заряд: + или -. На некоторых каналах заряд находится в суперпозиции, то есть пока неизвестен.

Гиптопод Поликарп очень любит циклы, поэтому загадал загадку: сколькими способами можно установить все неизвестные заряды, чтобы все простые циклы на схеме были отрицательными?

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

Простой цикл является отрицательным, если произведение зарядов каналов этого цикла даёт знак -.

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

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

Первая строка содержит два целых числа N и M — количество точек и каналов на схеме, соответственно (1 ≤ N ≤ 2·105; 0 ≤ M ≤ 2·105).

Следующие M строк содержат описания каналов в виде пары целых чисел ai и bi (1 ≤ ai, bi ≤ N; ai ≠ bi), означающих номера точек, которые соединяет этот канал, а также символ, означающий заряд этого канала: «+», «-» или «?».

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

В единственную строку выведите целое число — ответ на задачу.

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

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

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

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

В первой строке заданы два целых числа A и B (1 ≤ A ≤ 109, 10 ≤ B < 100) в десятичной системе счисления.

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

В произвольном порядке выведите все основания систем счисления, в которых запись числа A оканчивается на десятичную запись числа B. Если таких систем нет, выведите  - 1.

Пример
Входные данные
71 13
Выходные данные
68 4 

F. Немного о зубробизонах
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Зубробизон Ромалий выставил в ряд N горшков с травой и пронумеровал их слева направо числами от 1 до N.

Затем он составил M правил обмена, где каждое правило это два натуральных числа от 1 до N  — номера горшков, которые нужно поменять местами.

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

...

В M день он воспользовался M-м правилом и поменял местами соответствующие горшки.

В M + 1 день он воспользовался первым правилом и поменял местами соответствующие горшки.

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

И так далее...

Ромалий хочет проверить себя и просит вас рассчитать положение горшков через K дней.

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

В первой строке заданы три целых числа: N (1 ≤ N ≤ 103), M (1 ≤ M ≤ 105) и K (1 ≤ K ≤ 1018)  — число горшков, число правил и количество дней соответственно.

Следующие M строк содержат описание правил в виде пары целых чисел ai и bi (1 ≤ ai, bi ≤ N), обозначающих номера горшков, которые нужно поменять местами.

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

В единственной строке выведите N чисел  — положение горшков через K дней.

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

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

Сколькими способами можно расставить на квадратной доске размера N клеток K ладей, чтобы они не били друг друга?

На доске имеется несколько запрещённых клеток, в которые ставить фигуры нельзя.

Все ладьи одинаковые. Ни фигуры, ни клетки не имеют цвета.

Считается, что ладья бьёт другую ладью, если они обе находятся в одной строке или в одном столбце доски.

Посчитайте количество способов и выведите его остаток от деления на число 109 + 7.

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

Первая строка содержит два целых числа N и K — размеры доски и количество ладей (1 ≤ N ≤ 109; 1 ≤ K ≤ 107).

Вторая строка содержит целое число M — количество запрещённых клеток (0 ≤ M ≤ 40).

В следующих M строках содержатся координаты клеток в виде пар чисел xi, yi (1 ≤ xi, yi ≤ N).

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

Выведите единственное число — ответ на задачу.

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

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

Всё, что делает Генри, является хардкорным. Вот и сейчас он выписал n целых чисел, пренадлежащих отрезку [0, 109] и образующих хардкорный массив — массив, в котором все попарные разности различны.

Попарные разности массива — это все числа |ai - aj| для всех i и j таких, что 1 ≤ i < j ≤ n.

Думаете, Вы такой же хардкорный, как Генри? Конечно нет. Поэтому, Ваша задача немного проще: в выведенном Вами массиве количество различных попарных разностей должно быть хотя бы 90% от количества всех попарных разностей.

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

В единственной строке ввода содержится целое число n — требуемый размер массива (2 ≤ n ≤ 10 000).

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

Выведите n целых чисел ai (0 ≤ ai ≤ 109), удовлетворяющих заданным требованиям.

Примеры
Входные данные
2
Выходные данные
404 42
Входные данные
4
Выходные данные
322 228 1488 1337
Входные данные
7
Выходные данные
3 14 15 92 65 35 9
Примечание

Массив в третьем тестовом примере не является абсолютно хардкорным. Всего попарных разностей в нём 21, но две из них, |3 - 9| и |15 - 9|, равны между собой. Тем самым в нём 20 различных разностей, что составляет примерно 95% и является приемлемым результатом.

I. Виталя и Рома
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

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

Правила игры следующие:

  1. Вначале игры число P равно нулю.
  2. За всю игру совершается N операций.
  3. Каждая операция  — прибавление или вычитание из числа P двойки в заданной степени S.
  4. После выполнения каждой операции необходимо вывести число единиц в двоичной записи числа P.

    Гарантируется, что в любой момент времени число P не может быть отрицательным.

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

На первой строке задано целое число N (1 ≤ N ≤ 105) - количество операций.

На следующих N строках заданы операции, где каждая операция задается одной из двух строк: «add S» или «sub S», где S (0 ≤ S ≤ 105)  — это целое число.

Операция «add S» означает, что нужно прибавить к числу P двойку в степени S.

Операция «sub S» означает, что нужно вычесть из числа P двойку в степени S.

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

Для каждого из N запросов выведите на одной строке число  — количество единиц в двоичной записи числа P после выполнения данной операции.

Примеры
Входные данные
2
add 1
sub 1
Выходные данные
1
0
Входные данные
4
add 2
add 8
sub 3
sub 0
Выходные данные
1
2
6
7

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

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

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

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

Какое максимальное количество квадратных кусков можно получить таким образом?

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

Единственная строка ввода содержит два целых числа W и H, разделённых пробелом (1 ≤ W, H ≤ 109).

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

Выведите единственное целое число — ответ на задачу.

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

K. Созвездие Бизона
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Астроном Виталий открыл новое созвездие и назвал его созвездием Бизона. Он сфотографировал это созвездие два раза, и оказалось, что созвездия были сфотографированы под различными углами. По заданным координатам звёзд созвездия требуется найти соответствующую разность углов.

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

Первая строка входных данных содержит одно целое число n (1 ≤ n ≤ 1000). Каждая из последующих n строк содержит два вещественных числа xi и yi — координаты очередной звезды созвездия на первой фотографии (|xi|, |yi| ≤ 100). Числа даны не более чем с 10 знаками после десятичной точки; гарантируется, что расстояние между любыми двумя звёздами созвездия не менее 10 - 5.

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

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

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

Пример
Входные данные
3
1.0 1.0
2.0 2.0
1.0 2.0
4.0 3.0
4.0 4.0
3.0 3.0
Выходные данные
3.14159265359