Страница: << 1 2 3 4 5 >> Отображать по:
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

«Принимая во внимание современные тенденции в области высоких технологий, с 2019 года Всероссийскую олимпиаду по информатике было решено проводить на планшетных компьютерах. Это нововведение настолько популяризовало программирование, что в 2020 году в отборочных этапах олимпиады приняло участие беспрецедентно много участников. Как следствие, количество участников заключительного этапа 2020 года также возросло, и в этом году впервые превысит порог в...»

Вот в такой сложной ситуации оказался оргкомитет заключительного этапа Всероссийской олимпиады по информатике 2020 года. Чтобы максимально комфортно разместить всех участников в зале, оргкомитет принял решение рассадить участников за квадратные столы, до четырех участников за каждый стол: ведь школьнику с планшетом много места для работы не нужно. У каждой стороны стола может стоять максимум один стул, иначе участники будут задевать друг друга локтями.

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

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

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

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

На вход подаются числа N и M — количество столов, помещающихся по ширине и по длине зала, а также план расстановки мебели в прямоугольном зале. Зал заполнен столами полностью, то есть столов всего N × M. План представляет собой таблицу размером 3N × 3M, где каждый стол с его окружением задан квадратом 3 × 3.

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

В первой строке через пробел вводятся числа N (1 ≤ N ≤ 100) и M (1 ≤ M ≤ 100). В следующих 3N строчках задается текущая расстановка мебели согласно указанному выше формату. Каждая строчка имеет длину 3M.

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

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

Примечание

Тесты к этой задаче состоят из трех групп.

  • Тесты 1–-2. Тесты из условия, оцениваются в ноль баллов.
  • Тесты 3–-20. В тестах этой группы N, M ≤ 5. Эта группа оценивается в 30 баллов.
  • Тесты 21-–50. В тестах этой группы дополнительных ограничений нет. Эта группа оценивается в 70 баллов. Решение будет тестироваться на тестах этой группы только в случае прохождения всех тестов из второй группы.

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

Примеры
Входные данные
2 2
......
.TCCT.
.C..C.
.C..C.
.TCCT.
......
Выходные данные
......
.T.CT.
.C..C.
.C..C.
.TCCT.
......
Входные данные
1 1
.C.
CTC
.C.
Выходные данные
.C.
CTC
.C.
ограничение по времени на тест
3.0 second;
ограничение по памяти на тест
256 megabytes

В последнее время стал очень популярным язык программирования «Phigon». Главная особенность этого языка состоит в том, что все программы на этом языке выглядят очень коротко и лаконично. К сожалению, эти программы отличаются тем, что иногда очень трудно понять, почему же они работают долго.

Вам поручено выяснить ответ на этот вопрос. Для этого первым делом необходимо написать анализатор программы, который определяет, сколько в ней выполняется действий. Мы будем рассматривать упрощенную модель программы на языке «Phigon». Примеры программ на языке «Phigon» смотрите в конце условия. Как и в любом языке программирования, в «Phigon» есть переменные. Названия переменных — это строки из маленьких латинских букв длиной не более 50. Переменные могут иметь любые названия, кроме «if», «while», «or», «and» и «not».

Как и в любом языке программирования, в «Phigon» есть арифметические выражения, состоящие из целых чисел, переменных и знаков арифметических операций «+», «-» и «*». Более формально, арифметические выражения в «Phigon» задаются следующим образом:


≤арифметическое выражение> ::= ≤слагаемое> | ≤cлагаемое> (+|-) ≤арифметическое выражение>
≤слагаемое> ::= ≤множитель> | ≤множитель> * ≤слагаемое>
≤множитель> ::= -≤множитель> | ≤неотрицательное число> | ≤переменная> | (≤арифметическое выражение>)

Тем самым, как и в любом языке программирования, в «Phigon» унарный минус имеет больший приоритет, чем умножение, а оно в свою очередь имеет больший приоритет, чем сложение. Каждое отрицательное число, встречающееся в программе, считается полученным в результате применения унарного минуса к соответствующему положительному числу. Например, запись отрицательного числа вида -42 означает применение унарного минуса к неотрицательному числу 42.

Как и в любом языке программирования, в «Phigon» есть операторы присваивания, которые выглядят следующим образом:


≤оператор присваивания> ::=
≤переменная> = ≤арифметическое выражение>

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

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

Как и в любом языке программирования, в «Phigon» есть логические выражения, состоящие из арифметических выражений, знаков сравнения «», «≤=», «>», «>=», «==», «!=» и логических операторов «and», «or» и «not». Более формально,


≤логическое выражение> ::= ≤конъюнкция> | ≤конъюнкция> or ≤логическое выражение>
≤конъюнкция> ::= ≤логическое условие> | ≤логическое условие> and ≤конъюнкция>
≤логическое условие> ::= not ≤логическое условие> | ≤арифметическое выражение>
(≤|≤=|>|>=|==|!=) ≤арифметическое выражение> | (≤логическое выражение>)
.

Тем самым, как и в любом языке программирования, в «Phigon» отрицание имеет больший приоритет, чем оператор конъюнкции «И», а он в свою очередь имеет больший приоритет, чем оператор дизъюнкции «ИЛИ».

Как и в любом языке программирования, в «Phigon» есть условный оператор, имеющий следующий вид:


≤условный оператор> ::=
if ≤логическое выражение>:
≤отступ>≤блок операторов>
где ≤блок операторов> — это некоторая последовательность операторов, идущая с дополнительным отступом в 4 пробела. Формальное определение для ≤блок операторов> мы дадим позднее. Как и в любом языке программирования, если логическое выражение истинно, то соответствующий блок операторов исполняется, а если ложно — то нет. Заметим, что при наличии вложенного условного оператора, у соответствующего блока операторов уже будет отступ в 8 пробелов, и так далее.

Как и в любом языке программирования, в «Phigon» есть оператор цикла, имеющий следующий вид:


≤оператор цикла> ::=
while ≤логическое выражение>:
≤отступ>≤блок операторов>

где, как и в условном операторе, ≤блок операторов> — это некоторая последовательность операторов, идущая с дополнительным отступом в 4 пробела. Как и в любом языке программирования, блок операторов исполняется снова и снова, пока верно логическое выражение.

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


≤блок операторов> ::= ≤оператор> | ≤оператор> ≤блок операторов>
≤оператор> ::= ≤оператор присваивания> | ≤условный оператор> | ≤оператор цикла>

Ваша задача состоит в том, чтобы узнать значение переменных после выполнения программы и количество раз, которое была выполнена каждая из операций =, +, - (суммарно как бинарный и как унарный), *, ≤=, >=, , >, ==, !=, and, not, or.

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

Во входном файле задана программа на языке «Phigon». Каждая инструкция расположена на своей строке. Пустых строк нет. Длина каждой строки не превосходит 500. В программе не более 5000 инструкций. Гарантируется, что значения всех промежуточных вычислений и численных констант в программе по модулю строго меньше 10500.

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

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

Выведите информацию о количестве раз, которые вызваны операции в следующем формате: для каждой операции, которая была выполнена, выведите строку операция: c, где c — это количество раз, которое была вызвана эта операция. Информацию об операциях надо выводить в лексикографическом порядке (обратите внимание на второй пример).

После этого выведите строку «total N operations», где N — суммарное количество выполненных операций. Гарантируется, что общее число операций не превосходит 200 000.

После этого через пустую строку выведите информацию о значении переменных после выполнения программы в формате Имя переменной: v, где v — значение переменной в порядке лексикографического возрастания имен переменных.

Примечание

Тесты к этой задаче состоят из четырех групп.

  • Тесты 1–-3. Тесты из условия, оцениваются в ноль баллов.
  • Тесты 4–-26. В тестах этой группы нет инструкций if и while. Эта группа оценивается в 30 баллов.
  • Тесты 27–-39. В тестах этой группы нет инструкций while. Эта группа оценивается в 30 баллов.
  • Тесты 40-–50. В тестах этой группы дополнительные ограничения отсутствуют. Эта группа оценивается в 40 баллов. Решение будет тестироваться на тестах этой группы только в случае прохождения всех тестов из второй и третьей групп.

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

Примеры
Входные данные
a=3
b=a+7*a
Выходные данные
*: 1
+: 1
=: 2
total 4 operations

a: 3
b: 24
Входные данные
a = 1 
if (a > 0):
    b=a+a*a-(2*a+(-a)*5)
if (a>=0)and   (a < 2):
    b = b + 1
if (a<=2) and (a ==1) and(a !=666):
    b = b + (-3)*(-3)*0*(-3) + 1
if ((not (a>4)) or (a>4) or (a>4)):
    b = b + 1
Выходные данные
!=: 1
*: 6
+: 6
-: 5
<: 1
<=: 1
=: 5
==: 1
>: 4
>=: 1
and: 3
not: 1
or: 2
total 37 operations

a: 1
b: 8
Входные данные
x = 1
while x < 5:
    x = x + 1
Выходные данные
+: 4
<: 5
=: 5
total 14 operations

x: 5
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

Максим и Лёша поехали на сборы в Петрозаводск. После тура они решили не ходить на дорешивание, а поиграть в шахматы. Игра проходит на бесконечной доске, и в какой-то момент Максим хитрыми махинациями добился того, что у него осталось три белых ладьи, а у Алексея — один чёрный король.

После своего поражения Алексей заподозрил, что Максим в некоторый момент сжульничал (ну откуда на бесконечной шахматной доске взяться третьей белой ладье, да и куда подевался король Максима?). Чтобы восстановаить справедливость он потребовал реванша и предложил разыграть ситуацию, когда у Максима осталось две белых ладьи и король, а у Лёши  — чёрный король.

Помогите Максиму при таких условиях поставить мат Лёше и доказать тем самым, что он просто лучше играет в шахматы, а состав фигур ни на что не влияет.

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

Это интерактивная задача. При запуске решения на стандартный поток ввода поступают 8 чисел — координаты чёрного короля, двух белых ладей и белого короля на поле. Координаты не превосходят по модулю 10. Гарантируется, что в начальный момент никакие две фигуры не стоят на одной клетке, чёрный король не находится под боем ни одной из ладей, и короли не атакуют друг друга. Первыми делают ход белые фигуры, то есть начинает Максим.

На каждый ход Максима вводится ответный ход Алексея — перемещение короля dx, dy относительно текущей позиции (0 ≤ |dx|, |dy| ≤ 1). В случае, если |dx| = |dy| = 0, программа должна немедленно завершиться (это означает, что был поставлен мат, пат или сделан некорректный ход).

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

Для каждого хода выводите на стандартный поток вывода три числа — обозначение фигуры (ладьи обозначаются как "R1" и "R2", король — как "K") и перемещение этой фигуры lx, ly (|lx| + |ly| > 0). Ход должен быть корректным, т. е. фигура не должна пойти в занятую клетку, ладья не может перепрыгнуть через другую фигуру, король не может пойти в клетку, атакуемую вражеским королём. Перемещение ладьи не должно быть больше, чем на 100 клеток.

Примеры тестов

Входные данные
3 2 0 3 2 0 1 0
0 -1
-1 1
1 0
-1 0
0 0
Выходные данные
R2 2 0
R1 4 0
R2 0 1
K 1 0
R2 0 1

Примечание

Вывод должен завершаться переводом строки и сбросом буфера потока вывода. Для этого используйте flush(output) на языке Паскаль или Delphi, fflush(stdout) или cout.flush() в С/C++, sys.stdout.flush() на языке Python, System.out.flush() на языке Java.

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

Ладья может ходить на произвольное количество клеток по горизонтали или по вертикали. Король же может ходить в любую соседнюю клетку, которая не находится под боем ладьи, в том числе, он может «съесть» ладью, если клетка, в которой ладья стоит, не находится под боем другой ладьи. Обратите внимание, что в случае, если король съест ладью, то выигрыш станет невозможным, и тест не будет пройден.

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

Тесты к этой задаче состоят из трёх групп партий.

  • Тесты 1–-13. Группа тестов оценивается в 20 баллов.
  • Тесты 14–-26. Группа тестов оценивается в 20 баллов.
  • Тесты 27–-66. Группа тестов оценивается в 60 баллов.

Баллы за каждую группу ставятся только при выигрыше всех партий в группе. Группы оцениваются независимо.

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

Пример ответа тестирующей системы для примера из условия.



Starting position: black king on (3 2), white rooks on (0 3) (2 0), white king on (1 0).

Turn 1
Max moves 2nd rook to (4 0)...
OK.
Alex moved king to (3 1)
Black king on (3 1), white rooks on (0 3) (4 0), white king on (1 0)

Turn 2
Max moves 1st rook to (4 3)...
OK.
Alex moved king to (2 2)
Black king on (2 2), white rooks on (4 3) (4 0), white king on (1 0)

Turn 3
Max moves 2nd rook to (4 1)...
OK.
Alex moved king to (3 2)
Black king on (3 2), white rooks on (4 3) (4 1), white king on (1 0)

Turn 4
Max moves king to (2 0)...
OK.
Alex moved king to (2 2)
Black king on (2 2), white rooks on (4 3) (4 1), white king on (2 0)

Turn 5
Max moves 2nd rook to (4 2)...
OK.
It's nowhere for king to go :-(
Game over! Checkmate - Max wins!

Положения фигур по ходу партии из примера.

ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

Сенсация! В программу Олимпийских игр решили включить соревнования по распилу бревен на скорость. Однако с организацией турнира возникли некоторые сложности. Как уже известно, в турнире примут участие N спортсменов.

Турнир будет организован по следующей схеме: будет проведено T туров, причем первые T - 1 из них будут отборочными, а последний — финальным. В каждом из отборочных туров все оставшиеся спортсмены будут разбиты на \(A\) (\(A\) >= 2) подгрупп по ровно \(B\) (\(B\) >= 2) человек в каждой. Из каждой подгруппы дальше пройдут ровно C человек (1 <= \(C\) < \(B\)). Для каждого отборочного тура будут выбраны свои значения \(A\), \(B\) и \(C\). В финале все оставшиеся участники одновременно сразятся между собой, определив чемпиона.

Так как доход организаторов зависит от количества проданных билетов, а оно, в свою очередь, от количества туров, то организаторы хотят провести как можно больше туров. Однако сами они с этой задачей не справились, поэтому обратились к вам за помощью. Найдите максимально возможное количество туров, включая финальный, которое можно провести, выбирая значения \(A\), \(B\) и \(C\) для каждого из отборочных туров.

Формат входного файла

В первой строке входного файла задано единственное целое число \(N\) — количество участников турнира (1 <= \(N\) <= 1012).

Формат выходного файла

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

Система оценки

Тесты к этой задаче состоят из пяти групп.

0. Тесты 1–2. Тесты из условия, оцениваются в ноль баллов

1. Тесты 3–30. В тестах этой группы N <= 30. Эта группа оценивается в 25 баллов, баллы начисляются только при прохождении всех тестов группы.

2. Тесты 31–40. В тестах этой группы N <= 1 000. Эта группа оценивается в 25 баллов, баллы начисляются только при прохождении всех тестов группы. Решение будет тестироваться на тестах этой группы только в случае прохождения всех тестов первой. группы.

3. Тесты 41–50. В тестах этой группы N <= \(10^6\). Эта группа оценивается в 25 баллов, баллы начисляются только при прохождении всех тестов группы. Решение будет тестироваться на тестах этой группы только в случае прохождения всех тестов первой и второй групп.

4. В тестах этой группы дополнительные ограничения отсутствуют. Эта группа оценивается в 25 баллов. Решение будет тестироваться на тестах этой группы offline, т. е. после окончания тура, причем только в случае прохождения всех тестов первой, второй и третьей групп. Тесты в этой группе оцениваются независимо

Примеры
Входные данные
3
Выходные данные
1
Входные данные
6
Выходные данные
3
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

Был обычный весенний вечер. За окном завывала метель. Бухгалтер Евгений скучал на работе и с грустью вспоминал о своих былых успехах на олимпиадах по программированию. В его школьные годы на олимпиадах давали не больше восьми задач, и, разглядывая график своих успехов на сайте Topforces, ему удалось подсчитать, что в \(v_1\) олимпиадах он решил ровно 1 задачу, в \(v_2\) олимпиадах — ровно 2, \(\ldots\), в \(v_8\) олимпиадах — ровно 8 задач (Евгений предпочитал не вспоминать об олимпиадах, на которых он ничего не решил). К концу рабочего дня в офисе не осталось чистой бумаги, а из всех электронных устройств включенным оставался только калькулятор. Нашему герою ничего другого не оставалось, кроме как ввести памятные ему числа в калькулятор: \(v_1 1 v_2 2 \ldots v_8 8\). Стоит заметить, что никаких пробелов и других разделителей на калькуляторе Евгения не было, поэтому он записал эти числа просто подряд, получив некоторое число \(N\). Кроме того, он был достаточно ленив, поэтому все \(v_i\) вводил без ведущих нулей, а если какое-то \(v_i\) равнялось нулю, то соответствующую пару \(v_i i\) он просто не вводил.

Например, если \(v_2 = 111\), \(v_3 = 1\), а все остальные \(v_i = 0\), то у Евгения получилось бы число \(N = 111213\).

Уйдя с работы, Евгений оставил калькулятор с введенным числом \(N\) на столе, чем и воспользовалась его любопытная коллега Марина. Она сразу догадалась, как образовано введенное число, и уже собиралась приступать к расшифровке, как вдруг поняла, что различных наборов \((v_1, \ldots, v_8)\), из которых можно было получить это число, может быть достаточно много. Так, приведенное выше число \(N\) может быть получено также и при \(v_1 = 11\), \(v_3 = 21\).

Марина попросила вас найти количество таких наборов по модулю числа \(1\,000\,000\,007 = 10^9 + 7\).

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

Входной файл содержит единственное оставленное Евгением на калькуляторе целое число \(N\) (\(1 \leqslant N \lt 10^{1\,000\,000}\)).

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

Выведите единственное целое число  количество различных наборов \((v_1, . . . , v_8)\), из которых описанным выше алгоритмом можно было получить число \(N\) , по модулю числа \(10^9 + 7\). 

Два набора \((v_1, . . . , v_8)\) и \((v′_1, . . . , v′_8)\) будем считать различными, если хотя бы для одного \(i\) от \(1\) до \(8\) \(v_i \ne v′_i\). 

Обратите внимание, что Евгений мог ошибиться и получить число \(N\), которое не соответствует ни одному набору \((v_1, . . . , v_8)\).

Система оценки
  • Подзадача 0 (0 баллов) тест из условия.
  • Подзадача 1 (30 баллов) в тестах этой группы \(1 \le N \lt 10^{10}\). Необходимые подгруппы: 0.
  • Подзадача 2 (30 баллов) в тестах этой группы \(1\le N \lt 10^{1000}\). Необходимые подгруппы: 0-1.
  • Подзадача 3 (40 баллов) без дополнительных ограничений. Необходимые подгруппы: 0-2.
Примеры
Входные данные
111213
Выходные данные
5

Страница: << 1 2 3 4 5 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест