Laiko ribojimas: 1s
Atminties ribojimas: 16MB
Duomenų failas: hanoj3.in
Rezultatų failas: hanoj3.out
Hanojaus bokštai 3
Hanojaus bokštų žaidime poziciją galime aprašyti sveikųjų skaičių seka ,
žymint, ant kurio stiebo šiuo metu užmautas i-asis diskas. Čia n yra diskų skaičius galvosūkyje. Diskai numeruojami nuo 1 iki n, pradedant nuo mažiausio.
Panagrinėkime, kaip atrodo žaidimo būsenos D su trimis diskais:
| Atlikta ėjimų | Diskai ant 1 stiebo | Diskai ant 2 stiebo | Diskai ant 3 stiebo | Žaidimo būsena D |
|---|---|---|---|---|
| 0 | 1, 2, 3 | - | - | (1, 1, 1) |
| 1 | 2, 3 | - | 1 | (3, 1, 1) |
| 2 | 3 | 2 | 1 | (3, 2, 1) |
| 3 | 3 | 1, 2 | - | (2, 2, 1) |
| 4 | - | 1, 2 | 3 | (2, 2, 3) |
| 5 | 1 | 2 | 3 | (1, 2, 3) |
| 6 | 1 | - | 2, 3 | (1, 3, 3) |
| 7 | - | - | 1, 2, 3 | (3, 3, 3) |
Parašykite programą, kuri pagal diskų skaičių n ir duotą žaidimo poziciją D nustatytų, ar ši pozicija pasiekiama optimaliai sprendžiant Hanojaus bokštų galvosūkį. O jei pasiekiama – išvestų, kiek ėjimų atliekama prieš pasiekiant šią žaidimo poziciją.
Pradiniai duomenys
Pirmoje pradinių duomenų eilutėje įrašytas diskų skaičius n (). Kitose n eilučių įrašyti skaičiai
(
).
Rezultatai
Į rezultatus turi būti įrašomas vienintelis skaičius – ėjimų skaičius, arba -1, jei tokia žaidimo būsena nėra pasiekiama optimaliai žaidžiant.
Pastaba: akivaizdu, kad optimaliai žaidžiant ta pati būsena nebus sutikta du kartus, todėl atsakymas bus vienareikšmis.
Pavyzdys
| Pradiniai duomenys | Rezultatai |
|---|---|
3 2 2 1 |
3 |
