JOI 2026 - Casino

Xem PDF



Dạng bài
Ngôn ngữ cho phép
C, C++, Clang
Điểm: 2600 (p) Thời gian: 2.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Azzurro và Bordeaux đến một sòng bạc ở Ý và quyết định chơi trò chơi do người chia bài Chiaro đề xuất. Hai người được đưa vào hai phòng riêng biệt và chơi \(Q\) lượt. Trong mỗi lượt, Azzurro hành động trước, rồi đến Bordeaux: Azzurro nhận chuỗi \(S\) gồm AB, độ dài \(L\), và tô xanh hoặc đỏ mọi ô của bảng \(8\times8\); Chiaro bí mật chọn một đường đi từ góc trên trái đến góc dưới phải, chỉ đi sang phải hoặc đi xuống, rồi đảo màu mọi ô trên đường đó; sau đó Bordeaux nhận bảng đã bị đảo màu và phải khôi phục \(S\).

Đây là bài Communication với hai tiến trình cô lập. Submission C++ của bạn phải cài đặt cả hai hàm dưới đây trong cùng một tệp; hai phía Azzurro và Bordeaux chạy trong hai tiến trình cô lập, không chia sẻ trạng thái với nhau. Không dùng standard input, standard output hoặc tệp khác; chỉ được ghi debug vào standard error.

C++
std::vector<std::vector<int>> Azzurro(int N, int L, std::string S);
std::string Bordeaux(int N, int L, std::vector<std::vector<int>> T);
  • Azzurro trả ma trận \(N\times N\) chỉ gồm 01; 0 là xanh, 1 là đỏ.
  • Bordeaux trả chuỗi chỉ gồm AB, đúng độ dài \(L\).

Các hàng và cột được đánh số từ \(0\) đến \(N-1\), lần lượt từ trên xuống dưới và từ trái sang phải. Mỗi đường đi của Chiaro bắt đầu ở \((0,0)\), kết thúc ở \((N-1,N-1)\) và mỗi bước chỉ đến ô kề ngay bên phải hoặc ngay phía dưới. Cả ô đầu và ô cuối đều bị đảo màu.

Ở lượt \(i\), Azzurro nhận \(N\), độ dài \(L_i\), chuỗi \(S_i\) và bảng ban đầu toàn màu trắng; sau đó phải tô mọi ô thành xanh hoặc đỏ. Bordeaux nhận \(N\), \(L_i\) và bảng sau khi Chiaro đảo màu, nhưng không nhận \(S_i\) hay đường đi. Mục tiêu là Bordeaux trả lại đúng chuỗi \(S_i\).

Trong Bordeaux, T[r][c] là màu của ô \((r,c)\): \(0\) là xanh và \(1\) là đỏ. Trả về ma trận sai kích thước hoặc có phần tử khác \(0,1\) bị chấm Wrong Answer [1]; trả về chuỗi sai độ dài hoặc có ký tự ngoài A, B bị chấm Wrong Answer [2]. Chuỗi đúng định dạng nhưng đoán sai được xử lý theo phần chấm điểm.

Có thể khai báo hàm phụ và biến toàn cục. Hãy đặt các hàm nội bộ và biến toàn cục trong namespace không tên để tránh xung đột với các tệp khác. Hai tiến trình Azzurro và Bordeaux không chia sẻ biến toàn cục.

Biên dịch và chạy thử

Khi nộp lên LQDOJ, dùng một tệp có #include "casino.h" và hiện thực cả hai hàm. Để chạy thử, biên dịch casino.cpp với trình mẫu grader.cpp bằng:

Bash
g++ -std=gnu++20 -O2 -o grader grader.cpp casino.cpp

Có thể chạy sh compile.sh trong gói thay cho lệnh trên. Nếu biên dịch thành công, tệp thực thi grader được tạo ra.

Gói gốc chính thức dùng hai tệp Azzurro.cpp, Bordeaux.cpp, lần lượt include Azzurro.h, Bordeaux.h, và biên dịch bằng g++ -std=gnu++20 -O2 -o grader grader.cpp Azzurro.cpp Bordeaux.cpp. Đây là bố cục của gói gốc, không phải yêu cầu nộp hai tệp trên LQDOJ.

Trình mẫu chạy trong một tiến trình, khác với hai tiến trình cô lập khi chấm thật. Trình mẫu đọc stdin theo dạng:

Q N
L_1
S_1
R_1
L_2
S_2
R_2
...
L_Q
S_Q
R_Q

\(R_i\) có độ dài \(2(N-1)\), gồm đúng \(N-1\) ký tự D\(N-1\) ký tự R. Bắt đầu từ \((0,0)\), đọc lần lượt các ký tự: D là đi xuống một ô, R là đi sang phải một ô. Chuỗi mô tả đường đi của Chiaro.

Trình mẫu in kết quả dạng Accepted: 26, trong đó số là ngưỡng độ dài \(L^*\) được định nghĩa ở phần chấm điểm, hoặc dạng Wrong Answer [1] với mã lỗi tương ứng. Nếu nhiều điều kiện chấm sai cùng xảy ra, chỉ một điều kiện được báo; trình mẫu có thể kết thúc ngay khi phát hiện điều kiện đó.

Dữ liệu vào

Bài nộp nhận dữ liệu qua các đối số của AzzurroBordeaux, không đọc stdin. Định dạng dữ liệu để chạy thử với trình mẫu được mô tả ở trên.

Dữ liệu ra

Submission không có standard output; kết quả được trả qua hai hàm chiến lược.

Ràng buộc

  • \(N=8\).
  • \(1\le Q\le30000\).
  • \(1\le L\le51\).
  • Chuỗi \(S_i\) có đúng \(L_i\) ký tự, chỉ gồm AB.
  • \(Q,L_i\) là các số nguyên.
  • Chuỗi đường đi \(R_i\) có đúng \(N-1\) ký tự D\(N-1\) ký tự R.
  • Mỗi hàm được gọi đúng \(Q\) lần. Đường đi của mỗi lượt được cố định trước khi gọi AzzurroBordeaux; grader không thích nghi theo kết quả trả về.

Phân nhóm

Nếu một testcase có ma trận hoặc chuỗi trả về không hợp lệ, lỗi thực thi, quá thời gian, hoặc quá bộ nhớ thì nhận \(0\) điểm. Ngược lại, với mỗi testcase đặt \(L\) là độ dài lớn nhất sao cho mọi lượt có \(L_i\le L\) đều được giải đúng; nếu giải đúng mọi lượt của testcase thì đặt ngưỡng này bằng \(51\). Lấy \(L^*\) là giá trị nhỏ nhất trong các ngưỡng của mọi testcase. Điểm được tính như sau:

  • \(1\le L^*\le28\): \(2L^*\) điểm.
  • \(29\le L^*\le39\): \(L^*+28\) điểm.
  • \(40\le L^*\le50\): \(67+3(L^*-40)\) điểm.
  • \(L^*=51\): \(100\) điểm.

Ví dụ giao tiếp

Grader mẫu dùng \(N=2\) chỉ để minh họa giao tiếp (dữ liệu chấm chính thức có \(N=8\)):

Dữ liệu vào đầy đủ của trình mẫu là:

2 2
1
B
RD
3
ABB
DR
Dữ liệu lượt Lời gọi Giá trị trả về
\(L=1\), \(S=\texttt{B}\), đường đi RD Azzurro(2, 1, "B") [[1, 0], [0, 1]]
Bảng sau khi đảo màu Bordeaux(2, 1, [[0, 1], [0, 0]]) "B"
\(L=3\), \(S=\texttt{ABB}\), đường đi DR Azzurro(2, 3, "ABB") [[0, 0], [0, 0]]
Bảng sau khi đảo màu Bordeaux(2, 3, [[1, 0], [1, 1]]) "ABB"

Ở lượt đầu, Chiaro đảo màu đường \((0,0)\to(0,1)\to(1,1)\); ở lượt hai, Chiaro đảo màu đường \((0,0)\to(1,0)\to(1,1)\). Bordeaux khôi phục đúng chuỗi trong cả hai lượt.

Ở lượt đầu, Azzurro tô các ô \((0,1),(1,0)\) xanh, các ô \((0,0),(1,1)\) đỏ. Sau khi Chiaro đảo màu, ba ô trên đường đi \((0,0),(0,1),(1,1)\) lần lượt có màu xanh, đỏ, xanh. Bordeaux ghi B và thắng.

Ở lượt hai, Azzurro tô mọi ô xanh. Sau khi Chiaro đảo màu, ba ô trên đường đi \((0,0),(1,0),(1,1)\) đều đỏ. Bordeaux ghi ABB và thắng.

sample-01-in.txt trong gói tương ứng với ví dụ này và không thỏa ràng buộc chính thức. sample-02-in.txt là dữ liệu mẫu thỏa ràng buộc chính thức.

Nguồn

JOI 2025/2026 Final Stage, Cuộc thi 2, bài Casino, Japanese Committee for IOI. Bản dịch được đối chiếu với đề gốc tiếng Nhật và bản tiếng Anh. Đề gốc, bản dịch và bản điều chỉnh được cung cấp theo CC BY-SA 4.0.

Tệp

  • casino-lqdoj.zip — Header đúng với giao diện LQDOJ, khung bài nộp, trình chấm mẫu công khai, dữ liệu mẫu, lệnh biên dịch và hướng dẫn tiếng Việt. Khung một tệp hiện thực cả Azzurro và Bordeaux; có hai dữ liệu mẫu.
  • joi2026-c2-casino-en.pdf — Đề bài tiếng Anh chính thức của bài Casino, JOI 2025/2026 Final Stage, Cuộc thi 2. PDF nguyên bản của Japanese Committee for IOI.
  • joi2026-c2-casino-ja.pdf — Đề bài tiếng Nhật chính thức của bài Casino, JOI 2025/2026 Final Stage, Cuộc thi 2. PDF nguyên bản của Japanese Committee for IOI.

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: