trang chủ / bài tập / blockflip

Trò chơi đảo khối

Đề bài

Mô tả

n khối xếp thành một hàng, đánh số từ 1 đến n từ trái sang phải. Mỗi khối có màu trắng (W) hoặc đen (B).

Bạn được phép thực hiện thao tác sau không quá 3n lần: chọn hai khối kề nhau và đảo màu cả hai khối đó (trắng thành đen, đen thành trắng).

Hãy tìm một dãy thao tác sao cho sau khi thực hiện, tất cả các khối có cùng một màu. Bạn không cần cực tiểu số thao tác, nhưng số thao tác không được vượt quá 3n. Nếu không tồn tại dãy thao tác như vậy, hãy báo là không thể.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n , số lượng khối.
  • Dòng thứ hai chứa xâu s gồm n ký tự, mỗi ký tự là W hoặc B. Nếu ký tự thứ i là W thì khối thứ i màu trắng, nếu là B thì màu đen.

Dữ liệu ra

  • Nếu không thể làm cho tất cả các khối cùng màu, in ra 1 .
  • Ngược lại, in ra một số nguyên k ( 0k3n ), số thao tác. Sau đó in ra k số nguyên p1,p2,,pk ( 1pjn1 ), trong đó pj là vị trí của khối bên trái trong cặp khối được đảo màu ở thao tác thứ j .

Nếu có nhiều đáp án, in ra một đáp án bất kỳ.

Ràng buộc

  • 2n200
  • s gồm đúng n ký tự, mỗi ký tự là W hoặc B.

Ví dụ

Input Output Giải thích
8
BWWWWWWB
3
2 4 6
Đảo cặp (2,3): BBBWWWWB. Đảo cặp (4,5): BBBBBWWB. Đảo cặp (6,7): BBBBBBBB. Tất cả đều đen.
3
BWB
2
1 2
Đảo cặp (1,2): WBB. Đảo cặp (2,3): WWW. Tất cả đều trắng.
4
BWBB
-1 Không thể làm cho tất cả cùng màu.
5
WWWBB
1
4
Đảo cặp (4,5): WWWWW.

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