Дата последнего обновления: 20 апреля 2002 г.
    Олимиады НГУ / Всесибирская олимпиада по программированию

  4Новости

  4Положение
  4Жюри
  4Оргкомитет

  4Правила

  4Студенческая
  4секция:

  4Задачи I тура
  4Тесты I тура
  4Результаты
  4I тура

  4Задачи II тура
  4Результаты
  4II тура

  4Школьная
  4секция:

  4Задачи
  4I тура

  4Задачи II тура
  4Результаты
  4II тура

  4В архив

Среда программирования: Borland Pascal 7.0, Borland C 3.1. Запрещено использовать расширенную память и создавать промежуточные файлы. Программы, написанные на C и C++, компилируются из командной строки с ключами -ml -287. Программы, написанные на Pascal, также компилируются из командной строки с ключами -R- -N+.

1. Кубик Рубика

Кубик Рубика определяется своими гранями: верхней, нижней, передней, задней, левой и правой. Каждая грань разбита на шесть квадратов, окрашенных в один из шести возможных цветов: R (красный), G (зеленый), Y (желтый), W (белый), B (синий), O (оранжевый). Будем считать, что квадратики нумеруются, начиная от левого верхнего угла грани, слева направо, сверху вниз, как показано на рисунке:

Грань задается строкой, содержащей перечисление цветов квадратиков в указанном порядке, например, строка "RYROYGRWR" задает следующую грань:

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

Начальным состоянием кубика называется такое состояние, когда все квадратики каждой грани имеют одинаковый цвет. При этом все грани по цвету различны, но порядок окраски не важен.
Кубик также имеет 3 горизонтальных и 3 вертикальных слоя, относительно его заданного положения.
Горизонтальные слои: верхний (T), средний горизонтальный (MH) и нижний (B).
Вертикальные: левый (L), средний вертикальный (MV) и правый (R).

Напишите программу, которая из заданного состояния переводит кубик в начальное состояние за минимальное количество шагов.
Каждый шаг - это поворот одного из слоев кубика на 90 градусов вправо (right), влево (left), вверх (up) или вниз (down). Поворот имеет следующий формат описания:
<грань> <поворот>,
например, MV up (среднюю вертикальную вверх), B right (нижнюю вправо).
Время работы программы - не более 30 минут.

Входные данные. Входной файл input.txt содержит шесть строк, описывающих состояние кубика.

Выходные данные. Выходной файл output.txt в первой строке должен содержать целое число N - количество шагов (N >= 0). В следующих N строках записываются описания поворотов в приведенном выше формате.
Исходная позиция может быть и неразрешима. В этом случае файл должен содержать только одно число -1.

Примечание. Программы оцениваются по следующей формуле:

где Mi - минимальное количество шагов, за которые можно собрать кубик для i-го теста,
Ni - количество шагов, которые получила Ваша программа на i-том тесте,
Ti - стоимость i-го теста,
k - количество тестов.

Пример.

- Нижняя грань


- Задняя грань


- Верхняя грань


- Левая, передняя и правая грани

Входной файл:

RYROYGRWR
GWGGOGBWB
OOORGYORO
WOWBROYYY
WWGBBBWYG
YBBRWRYGB

Выходной файл:

5
B right
MV down
T right
R up
MH left
Пояснения:

Количество шагов
Нижний слой вправо
Средний вертикальный слой вниз
Верхний слой вправо
Правый слой вверх
Средний горизонтальный слой влево


2. Картинка

В файле picture.pcx дана картинка. Нужно построить программу, воспроизводящую картинку при изменении ее размеров и количества цветов (например, при переходе от цветного изображения к черно-белому). Исходная картинка дана с максимальным количеством цветов размером 640 x 480. Программа имеет право читать лишь следующие исходные данные: высоту и ширину картинки, код цвета.
Программа запускается с командной строкой формата: "program.exe X Y C", где X и Y - размеры картинки, C - количество цветов.
Исходный файл picture.pcx во время исполнения программе не доступен.
Коды цветов следующие:

Mo2 черно-белый без градаций
Mо16 16 градаций серого
Мо256 256 градаций серого
Мо65536 2^16 градаций серого
Co16 VGA 16 цветов
Co256 SVGA 256 цветов
16b 16-битный true color
24b 24-битный true color
32b 32-битный true color

Время работы программы не более 5 сек.

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

  1. Описания, за исключением описаний констант и процедур, не учитываются.
  2. Каждое числовое значение, заданное в константе, считается за 1 (таким образом, описание постоянного массива из 10 элементов стоит 10).
  3. Процедуры рассматриваются как программы и к ним рекурсивно применяются
    те же правила подсчета длины.
  4. Комментарии не входят в подсчет длины.
  5. Каждый исполняемый оператор и каждый вызов процедуры в любом случае стоит 1.
  6. Каждая операция внутри оператора (арифметическая, логическая, индексация массива) добавляет 1 к цене.
  7. Вызовы функций рассматриваются как вызовы процедур и к ним рекурсивно применяются те же правила.
  8. Структурные операторы (типа begin end или { }) не учитываются.
  9. Определять макрокоманды запрещается.
  10. Использование функций стандартных библиотек считаются за одну операцию. Используемые внутри этих функций операции не учитываются.

Андрюшкевич Сергей & Чумаков Денис  
ask [at] ccfit.nsu.ru