Trò chơi xếp quân (Chips Puzzle)

Đề bài

Mô tả

Cho một bảng gồm n hàng và m cột. Mỗi ô của bảng chứa một xâu (có thể rỗng) gồm các ký tự '0' (quân trắng) và '1' (quân đen) xếp thành một hàng. Như vậy mỗi trạng thái của bảng được mô tả bằng một bảng các xâu nhị phân.

Bạn được phép thực hiện thao tác sau:

  • Chọn hai ô khác nhau (x1,y1)(x2,y2) nằm cùng một hàng hoặc cùng một cột, với điều kiện xâu tại ô (x1,y1) không rỗng;
  • Lấy ký tự cuối cùng của xâu tại ô (x1,y1) và chuyển nó lên đầu xâu tại ô (x2,y2).

Cho trạng thái đầu và trạng thái cuối của bảng. Đảm bảo rằng tổng số ký tự '0' và tổng số ký tự '1' ở hai trạng thái là như nhau. Gọi s là tổng độ dài tất cả các xâu (giống nhau ở cả hai trạng thái). Hãy đưa ra một dãy thao tác biến trạng thái đầu thành trạng thái cuối, sao cho số thao tác không vượt quá 4·s.

Có thể chứng minh rằng luôn tồn tại lời giải. Nếu có nhiều đáp án, in ra một đáp án bất kỳ thoả mãn.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm — số hàng và số cột của bảng.
  • n dòng tiếp theo mô tả trạng thái đầu: dòng thứ i chứa m xâu nhị phân không rỗng, xâu thứ j là xâu ở ô (i,j).
  • n dòng tiếp theo mô tả trạng thái cuối theo cùng định dạng.

Các hàng được đánh số từ 1 đến n, các cột từ 1 đến m.

Dữ liệu ra

  • Dòng đầu in số nguyên q — số thao tác sử dụng, với 0q4·s.
  • q dòng tiếp theo, mỗi dòng in bốn số nguyên x1,y1,x2,y2 mô tả một thao tác. Phải thoả mãn 1x1,x2n, 1y1,y2m, (x1,y1)(x2,y2), x1=x2 hoặc y1=y2, và tại thời điểm thực hiện, xâu ở ô (x1,y1) phải khác rỗng.

Dãy thao tác này phải biến trạng thái đầu thành trạng thái cuối.

Ràng buộc

  • 2n,m300
  • s100000 (tổng độ dài các xâu)
  • Số lượng ký tự '0' và số lượng ký tự '1' trùng nhau ở hai trạng thái.

Ví dụ

Input Output Giải thích
2 2
1 0
0 1
1 0
0 1
8
1 1 2 1
1 2 1 1
2 1 1 1
2 2 2 1
2 1 2 2
1 1 2 1
1 1 1 2
2 1 1 1
Trạng thái đầu đã trùng trạng thái cuối nên in ra một dãy thao tác trả bảng về đúng trạng thái đó (in ra 0 cũng được coi là hợp lệ). Đây chỉ là một trong nhiều đáp án đúng.
2 2
0 0
0 1
1 0
0 0
10
1 1 1 2
1 2 1 1
2 1 1 1
2 2 2 1
1 2 1 1
1 1 1 2
1 2 2 2
1 1 2 1
1 1 1 2
2 1 1 1
Cần chuyển quân '1' duy nhất từ ô (2,2) về ô (1,1). Dãy thao tác đưa toàn bộ quân về dạng chuẩn rồi rải lại đúng vị trí ở trạng thái cuối.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0