Bi và lỗ

Xem dạng PDF

Gửi bài giải

Điểm: 0,90 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Đây là một bài toán tương tác.

Alice và Bob đang chơi một trò chơi. Có ~n~ lỗ trống trên một hàng ngang, các lỗ được đánh số từ ~1~ đến ~n~ từ trái qua phải. Ban đầu, mỗi lỗ trong ~k~ lỗ cuối cùng có một viên bi ở trong. Alice là người chơi trước và hai người sẽ thay phiên nhau thực hiện các nước đi như sau:

  • Chọn một viên bi mà bên trái nó có ít nhất một lỗ trống.

  • Di chuyển viên bi này đến một ô trống bất kì ở bên trái. Lưu ý rằng bạn có thể di chuyển viên bi vượt qua các viên bi khác.

Người đầu tiên chuyển các viên bi đến ~k~ lỗ đầu tiên sẽ chiến thắng. Biết rằng cả hai người đều chơi tối ưu, bạn cần đóng vai một trong hai người và dành chiến thắng.

Input

Dòng đầu tiên gồm một số nguyên ~t~ (~1 \le t \le 50~) — số test case. Sau đây là mô tả các test case.

Mỗi dòng trong ~t~ dòng gồm hai số nguyên ~n~ và ~k~ (~1 \le k < n \le 1000~, ~1 \le k \le 50~) — số lỗ trống và số viên bi cho mỗi test case.

Bạn cần bắt đầu quá trình tương tác cho mỗi test case sau khi đọc ~n~ và ~k~.

Dữ liệu đảm bảo tổng ~n~ qua các bộ dữ liệu không vượt qua ~1000~.

Interaction

Để bắt đầu tương tác, in ra Alice hoặc Bob trên một dòng tương ứng với người mà bạn muốn đóng vai.

Xét nước đi di chuyển viên bi từ lỗ ~x~ sang lỗ ~y~, nước đi này được coi là không hợp lệ nếu một trong các điều sau xảy ra:

  • ~x > n~ hoặc ~x \le y~ hoặc ~y \le 0~.
  • Lỗ ~x~ trống.
  • Lỗ ~y~ đang có bi.

Khi đến lượt của bạn, in ra nước đi của bạn dưới dạng "move ~x\ y~".

Khi đến lượt của máy chấm, đọc vào nước đi của máy chấm dưới dạng "~cmd\ x\ y~".

  • ~cmd=~ move: Máy chấm thực hiện nước đi ~(x, y)~.
  • ~cmd=~ end: Trò chơi kết thúc.
    • ~x=y=-1~: Máy chấm không thể thực hiện nước đi hợp lệ và bạn thắng. Trong trường hợp này chương trình của bạn cần chuyển sang bộ dữ liệu tiếp theo hoặc dừng ngay lập tức khi đã xử lý hết các bộ dữ liệu.
    • Ngược lại: Máy chấm thực hiện nước đi cuối cùng ~(x, y)~ và chiến thắng. Trong trường hợp này chương trình của bạn cần dừng ngay lập tức.
  • Nếu ~cmd=~ invalid: Ở lượt trước đó, bạn đã thực hiện một nước đi không hợp lệ. Lúc này bạn cần dừng chương trình ngay lập tức.

Sau khi in ra người chơi bạn đóng vai hoặc một nước đi, đừng quên xuống dòng và flush đầu ra chuẩn, nếu không bạn có thể nhận verdict Time limit exceeded. Để làm điều này, bạn có thể sử dụng:

  • fflush(stdout) hoặc cout.flush() trong C++;
  • System.out.flush() trong Java;
  • fflush(output) trong Pascal;
  • stdout.flush() trong Python;
  • xem tài liệu chuẩn đối với các ngôn ngữ khác.

Scoring

Subtask Điểm Giới hạn
1 750 ~k\le 2~
2 750 ~n\le 20~
3 1250 Không có ràng buộc gì thêm
Tổng 2750

Sample interaction

Đầu vào chuẩn Đầu ra chuẩn Chú thích Trạng thái các viên bi
1 Số lượng test case là ~1~
5 2 Test case đầu tiên, ~n = 5~, ~k = 2~ _ _ _ * *
Alice Thí sinh chọn vai trò của Alice và đi trước _ _ _ * *
move 5 3 Thí sinh di chuyển viên bi từ vị trí ~5~ đến ~3~ _ _ * * _
move 3 2 BTC di chuyển viên bi từ vị trí ~3~ đến ~2~ _ * _ * _
move 4 1 Thí sinh di chuyển viên bi từ vị trí ~4~ đến ~1~ * * _ _ _
end -1 -1 BTC chấp nhận thua cuộc. * * _ _ _

Bình luận

Hãy đọc nội quy trước khi bình luận.


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