eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Одно перекладывание Ханойских башен

Одно перекладывание Ханойских башен

Здесь мы рассмотрим классическую задачу о Ханойских башнях. В ней имеются три стержня и набор круглых дисков. Пусть количество дисков равно \textbf{n}. Диски имеют разный размер, никакие два из которых не имеют одинаковый радиус. Основное правило состоит в том, что запрещено класть больший диск на меньший. Пронумеруем диски с \textbf{1} (наименьший) до \textbf{n} (наибольший), стержни будем именовать \textbf{A}, \textbf{B} и \textbf{C}. Изначально все диски расположены на стержне \textbf{A}. Цель задачи состоит в перенесении их на стержень \textbf{C}, последовательно перекладывая их один за одним, никогда не кладя больший диск на меньший. Существует хорошо известное решение, которое рекурсивно перемещает \textbf{n--1} диск с \textbf{A} на \textbf{B}, потом перемещает один диск с \textbf{A} на \textbf{C}, после чего рекурсивно перемещает \textbf{n -- 1} диск с \textbf{B} на \textbf{C}. Псевдокод рекурсивного решения задачи о Ханойских башнях имеет вид: \textbf{move(num_disks, from_post, spare_post, to_post)} \textbf{if (num_disks == 0)} \textbf{return} \textbf{move(num_disks -- 1, from_post, to_post, spare_post)} \textbf{print ("Move disk ", num_disks, " from ", from_post, " to ", to_post)} \textbf{move(num_disks -- 1, spare_post, from_post, to_post)} В этой задаче необходимо определить \textbf{k}-тое перекладывание по заданным \textbf{k} и \textbf{n}. \InputFile Каждая строка содержит два целых числа \textbf{k} и \textbf{n}. В конце входных данных расположена строка из двух нулей. Входные значения корректны, \textbf{k }и \textbf{n} - положительные целые числа, \textbf{k} меньше \textbf{2^n}, поэтому \textbf{k}-тое перекладывание существует, \textbf{n} не более \textbf{60}, поэтому ответ помещается в \textbf{64}-битовый целочисленный тип. \OutputFile Вывести требуемое \textbf{k}-тое перекладывание, совершенное алгоритмом. Формат вывода должен быть следующим: "\textbf{Case}", один пробел, номер теста, двоеточие, один пробел, и ответ для текущего теста в формате: номер диска, имя стержня \textbf{from_post} и имя стержня \textbf{to_post}, разделяя их одним пробелом. Пробелы в конце строки не выводить.
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
1 3
5 3
8 4
0 0
Выходные данные #1
Case 1: 1 A C
Case 2: 1 B A
Case 3: 4 A C
Источник ACM ICPC NCNA Programming Contest - November 7, 2013