IOI 2001 - Ioiwari Game

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1900 (p) Thời gian: 1.0s Bộ nhớ: 32M Input: bàn phím Output: màn hình

Những trò chơi Mancala với hạt và hốc là một trong các hình thức giải trí lâu đời nhất. Ioiwari là một biến thể được thiết kế riêng cho IOI. Hai người chơi dùng một bàn tròn có bảy hốc quanh mép, đánh số \(1\) đến \(7\) theo chiều kim đồng hồ. Mỗi người còn có một kho hạt riêng.

Ban đầu, 20 hạt được phân vào bảy hốc, mỗi hốc có ít nhất 2 và nhiều nhất 4 hạt; cả hai kho đều trống. Hai người đi luân phiên. Trong một lượt, người chơi chọn một hốc không rỗng, lấy tất cả hạt trong đó lên tay và để hốc ấy trống. Bắt đầu từ hốc kế tiếp, lần lượt xét các hốc theo chiều kim đồng hồ và làm như sau cho đến khi tay không còn hạt:

  • Nếu trên tay còn nhiều hơn một hạt: nếu hốc đang xét đã có 5 hạt, lấy một hạt từ hốc chuyển vào kho của mình, không lấy bớt hạt trên tay; nếu không, đặt một hạt từ tay vào hốc.
  • Nếu trên tay chỉ còn một hạt: nếu hốc đang xét có từ 1 đến 4 hạt, chuyển tất cả hạt trong hốc cùng hạt trên tay vào kho của mình. Nếu hốc có 0 hoặc 5 hạt, chuyển hạt trên tay vào kho của đối phương.

Trò chơi kết thúc khi sau một lượt đi, cả bảy hốc đều trống. Người có nhiều hạt trong kho hơn thắng; nếu bằng nhau thì hòa.

Người đi trước luôn có chiến lược thắng. Hãy viết chương trình đóng vai người đi trước và thắng. Đối thủ của bộ chấm chơi tối ưu: một khi bạn để cho họ có cơ hội thắng, họ sẽ thắng.

Tương tác

Chương trình của bạn là người chơi 1, đối thủ là người chơi 2. Đầu tiên, đọc một dòng gồm bảy số nguyên \(p_1,\ldots,p_7\) từ đầu vào chuẩn, là số hạt ban đầu trong các hốc. Sau đó:

  • Đến lượt mình, in số hiệu hốc không rỗng mà bạn chọn ra đầu ra chuẩn.
  • Đến lượt đối thủ, đọc số hiệu hốc họ chọn từ đầu vào chuẩn.
  • Kết thúc khi tất cả hốc trống sau một lượt đi.

Phải đẩy dữ liệu sau khi in nước đi. Với C++, dùng cout << mymove << endl << flush; và đọc bằng cin >> last;. Với C, dùng printf("%d\n", mymove); fflush(stdout);scanf("%d", &last);. Với Pascal, dùng Writeln(mymove);Readln(last);.

Công cụ gốc

Công cụ ioiwari2 trên Linux, hoặc ioiwari2.exe trên Windows, chơi tối ưu ở vai người chơi 2 từ vị trí cố định 4 3 2 4 2 3 2. Công cụ in vị trí này trước, sau đó đọc các nước đi của người chơi 1 và in nước đi của mình. Có thể chạy hai chương trình ở hai cửa sổ và chuyển các nước đi bằng tay. Công cụ gốc ghi cuộc đối thoại vào ioiwari.out.

Chấm điểm

Trong thang điểm gốc, mỗi ván thắng được 4 điểm, hòa được 2 điểm, thua được 0 điểm. Bảng tổng quan kỳ thi quy định 25 ván, tổng tối đa 100 điểm.

Bản luyện tập sử dụng 24 vị trí xuất phát còn có trong kho dữ liệu chính thức; không bổ sung một ván thứ 25 giả định. Cả 24 bộ kiểm tra có trọng số bằng nhau: thắng nhận toàn bộ điểm của bộ đó, hòa nhận một nửa, thua nhận 0. Tổng điểm được quy đổi về thang 100. Đây là điều chỉnh so với số ván và điểm tuyệt đối của kỳ thi gốc.

Ví dụ

Ví dụ 1

Input
4 3 2 4 2 3 2
3
4
7
Output
2
5
5
Giải thích

Hai khối là các dữ liệu nhận và gửi của cùng một cuộc đối thoại, phải xen kẽ theo lượt chứ không đọc toàn bộ đầu vào trước. Sau vị trí ban đầu, các lượt lần lượt là người chơi 1 chọn 2, người chơi 2 chọn 3, người chơi 1 chọn 5, người chơi 2 chọn 4, người chơi 1 chọn 5, người chơi 2 chọn 7.

Sau thao tác Hốc 1 2 3 4 5 6 7 Kho 1 Kho 2
Ban đầu 4 3 2 4 2 3 2 0 0
Người 1 chọn 2 4 0 3 5 0 3 2 3 0
Người 2 chọn 3 4 0 0 4 1 4 0 3 4
Người 1 chọn 5 4 0 0 4 0 0 0 8 4
Người 2 chọn 4 0 0 0 0 1 1 1 8 9
Người 1 chọn 5 0 0 0 0 0 0 1 10 9
Người 2 chọn 7 0 0 0 0 0 0 0 11 9

Nguồn

Đề gốc IOI 2001. Bảng tổng quan ngày 1.

Tệp

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: