trang chủ / đề bài / dhbb18_hanoi

Tháp Hà Nội

Đề bài

Mô tả

Trò chơi tháp Hà Nội là trò chơi nổi tiếng với những chiếc đĩa có kích thước đôi một khác nhau, có lỗ ở giữa, nằm xuyên trên ba chiếc cọc A, B, C.

Trò chơi bắt đầu bằng trạng thái các đĩa được chồng lên nhau ở cọc A, đĩa nhỏ nằm trên đĩa lớn, tức là đĩa nhỏ nhất nằm trên cùng, tạo ra một dạng hình nón. Yêu cầu của trò chơi là chuyển toàn bộ số đĩa từ cọc A sang cọc C, tuân theo các quy tắc sau:

  • Chỉ sử dụng 3 cọc để chuyển;
  • Một lần chỉ được di chuyển một đĩa nằm trên cùng từ cọc này sang cọc khác;
  • Một đĩa chỉ được đặt lên một đĩa lớn hơn.

Trong bài toán này, chúng ta sẽ có n chiếc đĩa, đánh số từ 1 đến n theo thứ tự kích thước đĩa tăng dần, đĩa 1 là đĩa có kích thước nhỏ nhất, đĩa n là đĩa có kích thước lớn nhất. Ban đầu, các đĩa nằm rải rác ở ba cọc nhưng vẫn thỏa mãn điều kiện đĩa nhỏ nằm trên đĩa lớn và mục tiêu là chuyển toàn bộ đĩa thành một chồng đĩa ở cọc C.

Yêu cầu: Cho trạng thái của các đĩa nằm ở các cọc, hãy tìm cách chuyển toàn bộ đĩa thành một chồng đĩa ở cọc C. Số lần chuyển đĩa không được vượt quá 2n−1 (luôn tồn tại cách chuyển như vậy). Nếu có nhiều cách chuyển thỏa mãn, in ra một cách bất kỳ.

Dữ liệu vào

  • Dòng đầu chứa số nguyên dương n;
  • Dòng thứ hai chứa một xâu gồm n kí tự, kí tự thứ i (i=1,2,…,n) bằng 'A' hoặc 'B' hoặc 'C' cho biết đĩa thứ i đang nằm ở cọc A hoặc cọc B hoặc cọc C.

Dữ liệu ra

  • Dòng đầu chứa số nguyên s là số lần chuyển đĩa (0≤s≤2n−1);
  • Dòng thứ j (j=1,2,…,s) trong s dòng tiếp theo, mỗi dòng gồm đúng hai kí tự mô tả một thao tác chuyển đĩa. Cụ thể, kí tự thứ nhất là tên cọc chứa đĩa cần chuyển, kí tự thứ hai là tên cọc mà đĩa chuyển tới.

Ràng buộc

  • 1≤n≤20.

Subtasks

  • Có 20% số test ứng với 20% số điểm của bài có n=3;
  • Có 30% số test khác ứng với 30% số điểm của bài có n≤10 và cả n đĩa ban đầu ở cọc A;
  • Có 20% số test khác ứng với 20% số điểm của bài có n≤10;
  • Có 30% số test còn lại với 30% số điểm còn lại của bài có n≤20.

Ví dụ

Input Output Giải thích
3
AAC
3
AB
AC
BC
Đĩa 1, 2 ở cọc A, đĩa 3 ở cọc C. Chuyển đĩa 1 sang cọc B, đĩa 2 sang cọc C, rồi đĩa 1 từ cọc B sang cọc C.
3
CBA
5
CB
AC
BA
BC
AC
Ví dụ bổ sung (không có trong đề gốc). Chuyển đĩa 1 từ cọc C lên đĩa 2 ở cọc B, đĩa 3 sang cọc C, rồi chuyển chồng hai đĩa 1,2 từ cọc B sang cọc C qua cọc A.
1
C
0 Ví dụ bổ sung. Đĩa duy nhất đã ở cọc C nên không cần chuyển.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0