Submit | All submissions | Best solutions | Back to list |
HAN01 - Ha-noi! |
Little Sabrina loves solving puzzles. Last week she got a new puzzle: The "Tower of Hanoi" puzzle. This puzzle is based on an old legend: "The temple priests of Hanoi have to transfer a tower consisting of 64 fragile disks of gold from one part of the temple to another, one disk at a time. The disks are arranged in order, no two of them the same size, with the largest on the bottom and the smallest on top. Because of their fragility, a larger disk may never be placed on a smaller one, and there is only one intermediate location where disks can be temporarily placed. It is said that before the priests complete their task the temple will crumble into dust and the world will vanish in a clap of thunder." Sabrina reconstructed the problem with some coins of different size. She solved the puzzle for three coins in 7 steps, for four coins in 15 steps,... after solving the problem with 7 coins she had the hang of it. Yesterday she started to solve the puzzle with 31 coins and her optimal strategy. After hours of moving coins from one pile to the other she was very tired and went to bed. This was a bad idea! Her little brother Robin discovered the towers of coins and - whoops! - threw it on the floor. Then he noticed a sheet of paper: "Don't touch this towers! Steps: 16543". "Oh no!" Robin has to reconstruct the tower because his sister can get very, very angry... Your task is to help Robin to reconstruct the towers. Sabrina started the game with all disks on peg number one and her goal was to move the disks to peg number two. She used her optimal strategy and noted the number of steps she had done.
Input
The first line of input contains one integer t: The number of testcases. t lines follow. Each line contains two integers n (2< n< 61) and k (0< k< 2n). n is the number of disks of the Hanoi puzzle and k the number of steps Sabrina had done. Please be careful, the number k can be very large, it may not fit in a 32 bit integer.
Output
Output the reconstructed configuration of the towers after k steps. For each testcase output three lines. One for each tower. Each line consists of the tower identifier (1,2,3) a colon, one space and the disk numbers (n,n-1,...,2,1) which are separated by a '|'-character.
Example
Input: 3 3 6 32 889397450 31 16543 Output: 1: 1 2: 3|2 3: 1: 32|31|28|25|18|17|14|3 2: 30|29|26|13|12|11|10|9|6|5|2 3: 27|24|23|22|21|20|19|16|15|8|7|4|1 1: 31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|7|6 2: 15|8|5|4|3|2|1 3: 14|13|12|11|10|9
Added by: | Simon |
Date: | 2005-05-03 |
Time limit: | 2s |
Source limit: | 8082B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Languages: | C CSHARP C++ 4.3.2 CPP C99 CLOJURE LISP sbcl LISP clisp D FSHARP FORTRAN GO HASK JAVA LUA OCAML PERL PHP PRLG-swi PYTHON PYTHON3 PY_NBC RUBY SCALA |
Resource: | Ulm Algorithm Course SoSe 2005 |
hide comments
|
|||||
2013-10-28 11:16:54 Gunnar Völkel
Wie ich schon per E-Mail einigen empfohlen habe, solltet ihr euch ein paar größere Testcases (n=60 und großes k) erstellen und die auch noch testen. |
|||||
2013-10-24 03:33:12 Stefan Mayer
Habe es nun auch hinbekommen!! Das Problem war bei mir, dass ich ein long double verwendet habe, leider ist dieser bei sehr großen zahlen ungenau. Verwende nun keine Gleitkommazahlen mehr und es hat alles funktionier. |
|||||
2013-10-24 01:26:06 Tim Weidner
alle Testcases hier bestanden, ebenfalls -> wrong answer EDIT: long statt float, dann gings. (Python 2.7) Zuvor hatte ich die selbe Ausgabe wie Stefan Mayer, danach war die 1. Scheibe im 1. Testcase auf dem 1. Stapel Last edit: 2013-10-24 01:53:15 |
|||||
2013-10-24 00:11:54 Christopher Katzinski
Last edit: 2013-10-24 00:22:36 |
|||||
2013-10-23 20:49:11 Fabian Meyer
Hallo, hab das gleiche Problem. Wenn ich es auf meinem Rechner laufen lasse funktioniert es. Die Ein- und Ausgabe ist wie in der Aufgabenstellung gefordert (Eingabe: Anzahl der Testcases und dann jeweil eine neue Line in der man n und k getrennt durch ein Leerzeichen eingibt. Ausgabe: Nummer der Stange, Doppelpunkt, Leerzeichen und dann die Elemente). Außerdem transportiert es den Turm von 1 nach 2. Ich bin wirklich ratlos, hat noch jemand eine Idee, auf was man sonst achten muss? |
|||||
2013-10-23 13:01:09 Tobias Heß
Last edit: 2013-10-23 13:03:00 |
|||||
2013-10-23 12:43:15 Tobias Heß
@Stefan Mayer, der Erste von den Testcases, verstößt gegen die Regel 0<k<2^n endet aber trotzdem nicht in einem komplett versetzten Stapel |
|||||
2013-10-23 12:30:31 Tobias Heß
Also ich verwende long long und der Testcase von Mario Schmautz funktioniert bei mir auch, noch jmd ne Idee ? Und warum kann man sich seine "wrong answer" nicht anschauen ? Last edit: 2013-10-23 12:32:37 |
|||||
2013-10-23 11:13:04 Stefan Mayer
Ich bekomme hier auch nur "wrong answer" und weiß nicht warum, obwohl das ergebniss stimmt. Das ganze habe ich mit ideone.com getestet, die verwenden ja auch die Sphere Engine. Input: 6 40 12389123891123801 3 6 32 889397450 31 16543 30 1073741823 61 889397450 Output 1: 40|39|36|31|28|27|26|25|18|17|16|15|12|9|8|5|4 2: 37|30|29|24|21|20|13|6|3|2|1 3: 38|35|34|33|32|23|22|19|14|11|10|7 1: 1 2: 3|2 3: 1: 32|31|28|25|18|17|14|3 2: 30|29|26|13|12|11|10|9|6|5|2 3: 27|24|23|22|21|20|19|16|15|8|7|4|1 1: 31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|7|6 2: 15|8|5|4|3|2|1 3: 14|13|12|11|10|9 1: 2: 30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1 3: 1: 61|60|59|58|57|56|55|54|53|52|51|50|49|48|47|46|45|44|43|42|41|40|39|38|37|36|35|34|33|32|31|28|25|18|17|14|3 2: 27|24|23|22|21|20|19|16|15|8|7|4|1 3: 30|29|26|13|12|11|10|9|6|5|2 Vielleicht erkennt hier jemand ein Fehler |
|||||
2013-10-23 07:33:54 Mario Schmautz
@Tobias Heß. Folgende Dinge kommen mir in den Sinn, die schief gelaufen sein könnten und die durch die angegebenen Testcases nicht überprüft werden: Auf dem verwendeten System gilt sizeof(int)=4 sizeof(long)=4 und sizeof(long long)=8. => long long oder unsigned long long verwenden Wenn du deine Potenzen mit Bit-Schiebe-Operationen berechnest, achte darauf, dass auch die Literale vom passenden Typ sind. Also z.B. 1ull statt 1. Wenn der folgenede Testcase bei dir funktioniert, dann liegt es vermutlich nicht an den von mir genannten Punkten. 1 61 889397450 1: 61|60|59|58|57|56|55|54|53|52|51|50|49|48|47|46|45|44|43|42|41|40|39|38|37|36|35|34|33|32|31|28|25|18|17|14|3 2: 27|24|23|22|21|20|19|16|15|8|7|4|1 3: 30|29|26|13|12|11|10|9|6|5|2 |