11-й открытый турнир по программированию в Абакане
A. Стрелочки
ограничение по времени на тест
1.5 секунд
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

У вас в распоряжении табло размера n на m пикселей. Каждый пиксель может быть либо включён, либо выключен. Табло будет использоваться для отображения стрелок, указывающих направление движения. Всего есть четыре направления: вверх, вниз, влево и вправо.

Рассмотрим как устроена стрелка, указывающая вверх: вертикальный отрезок высотой в b пикселей, из которого сверху вниз под углом в 45 градусов, выходят два отрезка из a пикселей. Стрелки для остальных направлений можно получить поворотами на 90 градусов.

Например, так выглядят стрелки для всех направлений с параметрами a = 3 и b = 7

вверхвнизвлевовправо
...*......*.................
..***.....*.....*........*..
.*.*.*....*....*..........*.
...*......*...**************
...*....*.*.*..*..........*.
...*.....***....*........*..
...*......*.................

При этом, параметры стрелки должны обладать следующими ограничениями:

 — 2a ≤ b;

 — 2 ≤ a.

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

Для каждого направления вам нужно посчитать количество различных стрелок, которые можно отобразить на данном табло. Две стрелки с параметрами (a1, b1) и (a2, b2) считаются одинаковыми, если a1 = a2 и b1 = b2.

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

Первая строка содержит целые числа n и m — размеры табло (1 ≤ n, m ≤ 1 500).

Следующие n строк содержат по m символов: «.» означает битый пиксель, а «*» рабочий.

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

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

Примеры
Входные данные
5 7
...*...
.***.*.
*******
.*****.
...*...
Выходные данные
1
2
5
4
Входные данные
6 6
***.**
*.**.*
****.*
******
**.***
.***.*
Выходные данные
1
1
4
2
Входные данные
5 5
..*..
.***.
*.*.*
..*..
..*..
Выходные данные
2
0
0
0
Входные данные
4 4
****
****
****
****
Выходные данные
1
1
1
1

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

У Васи есть четыре спички, из которых он хочет выложить четырёхугольник.

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

Выясните, какую лучшую фигуру Вася может сделать. Если это квадрат, то выведите «square», если прямоугольник, то «rectangle». Иначе следует вывести «ugly».

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

Ввод содержит четыре целых числа a, b, c и d, означающих длины спичек.

Числа расположены в отдельных строках. 1 ≤ a, b, c, d ≤ 1000.

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

Выведите в единственную строку одно из слов «square», «rectangle» или «ugly».

Примеры
Входные данные
1
1
1
1
Выходные данные
square
Входные данные
1
1
2
2
Выходные данные
rectangle
Входные данные
1
2
3
4
Выходные данные
ugly

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

Земля наконец-то установила контакт с инопланетной цивилизацией, которая посылает сообщения через радиосигнал. Началось всё с объёмного сообщения, в котором объяснялись фундаментальные вещи логики, математики, физики и других наук, например, что такое целое число.

Позже было разъяснено, что такое перестановка — последовательность P из N целых различных чисел, каждое из которых лежит в диапазоне от 1 до N. А также, что такое инверсии в последовательности a — это количество таких i и j, что 1 ≤ i < j ≤ N и ai > aj.

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

Например, пусть была загадана перестановка (3, 6, 1, 4, 5, 2) и нас интересует ответ на набор чисел {2, 3, 4}. Если оставить только эти числа, выйдет (3, 4, 2), и ответом будет 2 — именно столько инверсий содержится в новой последовательности.

Обратите внимание, что перестановка не меняется после ответа на вопрос.

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

Помогите нашей цивилизации пройти экзамен, отгадайте перестановку!

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

Это интерактивная задача.

В начале вам на ввод подаётся целое число N — размер перестановки (1 ≤ N ≤ 1000).

Далее ваша программа общается с программой жюри. Вы можете выводить запрос на количество инверсий в формате «? k t1 t2 ... tk», где ti и есть выбранные числа. Каждый такой запрос должен быть в отдельной строке и заканчиваться очисткой буфера вывода.

Если запрос был корректным, следом вам на ввод в отдельной строке будет подано целое число — ответ на этот запрос.

Если вы считаете, что отгадали перестановку, следует вывести её в отдельной строке в формате «! P1 P2 ... PN», разделяя числа пробелами. После этого ваша программа должна немедленно завершиться.

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

Для очистки буфера вывода в различных языках используются следующие команды:

  • В языке Pascal: flush(output);
  • В С/С++: fflush(stdout) или cout.flush();
  • В Java: System.out.flush();
  • В Python: sys.stdout.flush() из библиотеки sys;
  • В C#: Console.Out.Flush();

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

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

Перед вами инструкция по созданию шедевра, выданная такой нейросетью. Она задана как последовательность символов, означающих, как нужно двигать кистью: «U» — движение вверх, «D» — вниз, «L» — влево, «R» — вправо. Каждое движение должно переместить кисть на одну единицу измерения. Мы будем считать, что рисование шедевра происходит на обычном клетчатом листе бумаги.

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

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

Единственная строка ввода содержит не менее одного и не более 100 символов.

Во вводе присутствуют только символы «U», «D», «L» или «R».

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

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

Символом «.» (точка) следует отображать нетронутую часть бумаги, а символом «X» (заглавная латинская буква) отображать нарисованную часть.

Примеры
Входные данные
RDRD
Выходные данные
XX.
.XX
..X
Входные данные
RRUULLDDDDLLUURR
Выходные данные
..XXX
..X.X
XXXXX
X.X..
XXX..

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

В начале урока физической культуры n школьников выстроились в ряд. Нумерация происходит от 1 до n, начиная слева.

Вы, учитель физ-ры, хотите разделить этот ряд на два, а именно, необходимо переместить первых m человек в конец ряда, сохранив порядок этих m детей, а также сохранив порядок остальных n - m детей.

Например, если n = 5 и m = 3, то вам необходимо добиться расстановки 4 5 1 2 3.

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

Чтобы не затягивать урок, Вам необходимо выдать не более n команд.

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

В единственной строке ввода содержатся два целых числа n и m (1 ≤ n ≤ 105; 0 ≤ m ≤ n - 1).

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

В первой строке выведите целое число K — количество обменов.

В следующих K строках выведите по паре чисел a и b, означающих очередной обмен.

Разрешается выводить любой корректный список команд.

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

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

Ефим и Серафим целый день играли в ним. Ефим всегда выигрывал, поэтому Серафиму надоело играть с ним и он решил изменить игру.

Есть одна кучка из n камней.

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

На первом ходу игрок может взять любое количество камней от 1 до n.

На каждом последующем ходу игрок ограничен в своём ходе относительно P — сколько камней было взято другим игроком на предыдущем ходу. На текущем ходу игрок может взять количество камней S такое, что оно равно P, либо такое, что чётности P и S различаются. Например, если на предыдущем ходу было взято 5 камней, то сейчас можно взять либо также 5, либо любое чётное положительное количество.

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

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

Определите для заданного n кто выиграет в игре.

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

В единственной строке ввода содержится целое число n (1 ≤ n ≤ 100).

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

Выведите «First» если победит первый игрок, «Second» если победит второй игрок и «Draw» если будет ничья.

Примеры
Входные данные
3
Выходные данные
First
Входные данные
4
Выходные данные
Draw

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

Оксаночке задали домашнее задание по теме системы счисления.

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

Троичная запись числа при необходимости дополняется ведущими нулями до длины M.

Сможете ли Вы сделать тоже самое для данного M?

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

В единственной строке ввода содержится целое положительное число M, не превосходящее 10.

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

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

Если вариантов несколько, то разрешается вывести любой, удовлетворяющий условиям.

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