Подразделы

Другие разделы

Дата и время

19/12/2024 17:47:35

Авторизация

Имя:
Пароль:
Зарегистрироваться
Восстановить пароль
 

printЗадачи заочного тура личного первенства 1998

print1. Сейф Карбофоса

Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

В игре "Братья Пилоты" для выхода из комнаты Карбофоса необходимо открыть сейф странной конструкции. На дверце сейфа квадратом 4x4 расположены шестнадцать ручек, которые могут находиться только в горизонтальном и вертикальном положении. При повороте ручки на 90 градусов одновременно с ней поворачиваются ручки, расположенные в той же самой горизонтали и вертикали, что и поворачиваемая ручка. Например, при повороте ручки во 2 ряду 3 столбце получим следующий результат:
 до          после
||--         |||-
|--|         -||-
---|         --||
|||-         ||--
Для того чтобы открыть сейф, нужно чтобы все ручки приняли горизонтальное положение.
Входной файл содержит в первой строке число `N` (`1\ ≤\ N\ ≤\ 20`) – количество наборов данных, далее следует `N` наборов (начальных комбинаций), разделенных пустой строкой, каждый набор представляет собой 4 строки по 4 символа | или - (начальное состояние ручек).
В выходной файл для каждого набора, если сейф можно открыть, вывести YES и через пробел минимальное число ручек, поворачиваваемых для открытия сейфа, или NO в противном случае.

Пример ввода

2
--|-
||||
--|-
--|-

--||
----
----
----

Пример вывода

YES 1
YES 6

print2. Китайская грамота

Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Многие языки (китайский, японский и даже русский) содержат большое число букв в алфавите, для которых нет прямых соответствий в латинском алфавите. При передаче электронных писем может быть потеряна или искажена любая информация с кодами вне диапазона 32-127 (пробел, цифры, латинский алфавит, пунктуация, а также символы CR и LF). Тексты, содержащие другие символы, должны кодироваться (UUencode, BASE64 или др. способом) при передаче и декодироваться при получении. Для облегчения работы с короткими текстами, а также при работе с компьютерами, на которых не установлены необходимые шрифты, можно использовать мнемоническую кодировку, заменяя буквы или сочетания букв похожими по произношению сочетаниями латинских букв. Для человека процесс кодирования-декодирования достаточно легок.
Требуется написать программу, декодирующую текст письма, чтобы его можно было распечатать или вставить в документ.
Входной файл содержит в первой строке число `N` (`1\ ≤\ N\ ≤\ 250`)  – количество кодов, далее следует `N` строк вида: исх.код пробел рез.код, например, я ya. Исходный код и результирующий код содержат от 1 до 4 символов без пробелов. Для результирующего кода используются только буквы латинского алфавита a-z, регистр не имеет значения. Далее идет текст письма: от 1 до 10 строк не более 80 символов в строке.
Выходной файл должен содержать декодированный текст письма. Все знаки препинания (символы, не являющиеся буквами A-Za-z) должны сохраниться. Если слово можно интерпретировать разными способами, выбирается интерпретация, содержащая наименьшее количество кодов. Например: пусть заданы коды {бу bu, р r, я ya, й y, а а}, тогда текст burya можно интерпретировать как буря (3 кода) и бурйа (4 кода). Выбирается первая интерпретация. Если две интерпретации имеют одинаковое число кодов, то выбирается комбинация, коды которой стоят раньше в списке кодов.

Пример ввода

8
м m
a a
ы iq
л L
р r
у u
я ya
й y
Mama miqla ramu. Lara riqla yamu.

Пример вывода

мама мыла раму. лара рыла яму.

print3. Выжимание воды

Ограничения: время – 500ms/1000ms, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Для уменьшения количества "воды" в текстах можно либо научиться писать кратко, либо просто сжимать получивщиеся тексты. Естественно, для программиста легче использовать второй путь.
Напишите программу, сжимающую текст. Словом будем называть последовательность прописных и строчных латинских букв (до 50 символов). Регистр букв игнорируется.
x-ray состоит из 2 слов X и RAY
Mary's состоит из 2 слов MARY и S
It's words состоит из 3 слов IT, S и WORDS
Повторяющееся слово будем заменять символом # и номером его последнего вхождения, отсчитываемым от текущего слова. Если слово достаточно коротко (при замене не происходит уменьшения текста), то замену не делаем. Знаки препинания, разделение на строки, остается как в исходном тексте.
Входной файл содержит текст для сжатия (от 1 до 50 строк, не более 80 символов в строке, не более 200 слов в тексте).
Выходной файл должен содержать получившийся сжатый текст.

Пример ввода

Dear Sally,

   Please, please do it--it would please
Mary very, very much.  And Mary would
do everything in Mary's power to make
it pay off for you.
   -- Thank you very much--

Пример вывода

Dear Sally,

   Please, #1 do it--it would #5
Mary very, #1 much.  And #5 #8
do everything in #5's power to make
it pay off for you.
   -- Thank #2 #20 #20--
loading