IOI 2010 - Memory

Xem PDF



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

Trò chơi Memory sử dụng 50 lá bài. Trên mỗi lá bài in một chữ cái từ A đến Y (mã ASCII từ 65 đến 89), mỗi chữ xuất hiện trên đúng hai lá bài. Các lá bài được xáo trộn và đặt úp trên bàn.

Jack lật ngửa hai lá bài để xem chữ trên đó. Với mỗi chữ trong 25 chữ cái, lần đầu tiên Jack lật ngửa đồng thời cả hai lá mang chữ ấy, mẹ sẽ cho Jack một viên kẹo. Ví dụ, lần đầu tiên Jack lật hai lá mang chữ M, Jack nhận được một viên kẹo. Sau đó, dù hai chữ có giống nhau hay không, cả hai lá đều được úp lại. Trò chơi tiếp tục đến khi Jack nhận đủ 25 viên kẹo, mỗi chữ một viên.

Yêu cầu cài đặt

Bạn phải cài đặt hàm sau, không viết main:

C++
void play();

Gọi hàm do trình chấm cung cấp để lật bài:

C++
char faceup(int C);

C là số hiệu lá bài, từ 1 đến 50. Lá bài này phải đang úp. Hàm trả về chữ in trên lá bài C. Sau mỗi hai lần gọi faceup, trình chấm tự động úp lại cả hai lá vừa lật. Chỉ được kết thúc play khi Jack đã nhận đủ 25 viên kẹo. Bạn được phép tiếp tục gọi faceup sau khi Jack nhận viên kẹo cuối cùng; các lần gọi đó vẫn được tính.

Dữ liệu vào

Đây là bài chấm qua giao diện hàm; chương trình của bạn không đọc dữ liệu vào. Trình chấm mẫu chính thức đọc một dòng gồm 50 ký tự, lần lượt là chữ trên các lá bài từ 1 đến 50.

Dữ liệu ra

Chương trình của bạn không ghi dữ liệu ra; hãy tương tác qua faceup. Khi lời giải đúng, trình chấm mẫu chính thức ghi OK n, trong đó n là số lần gọi faceup.

Ràng buộc

Có đúng 50 lá bài; mỗi chữ từ A đến Y xuất hiện đúng hai lần. Mỗi lượt phải lật hai lá khác nhau. Một cặp đã từng đem lại kẹo sẽ không đem lại thêm kẹo.

Phân nhóm

Nhóm Điểm Yêu cầu
1 50 Hoàn thành trò chơi đúng luật trong giới hạn thời gian; gói chấm giới hạn 2450 lần gọi faceup.
2 50 Hoàn thành mọi cách sắp xếp bài bằng nhiều nhất 100 lần gọi faceup.

Mốc số lần gọi được nêu trong nhóm 1 của đề gốc là:

\[ 2(49+48+\cdots+2+1)=2450. \]

Mỗi nhóm chỉ có điểm khi vượt qua toàn bộ các bộ kiểm tra của nhóm.

Ví dụ

Ví dụ 1

Input

Một trạng thái bài có các lá 1, 2 mang chữ B; lá 7, 50 mang chữ X; lá 15 mang chữ O.

Output
Lời gọi Giá trị trả về
faceup(1) 'B'
faceup(7) 'X'
faceup(7) 'X'
faceup(15) 'O'
faceup(50) 'X'
faceup(7) 'X'
faceup(7) 'X'
faceup(50) 'X'
faceup(2) 'B'
faceup(1) 'B'
faceup(2) 'B'
Note

Sau cặp lời gọi thứ nhất và thứ hai, hai chữ khác nhau nên Jack không được kẹo. Cặp thứ ba lật lá 50 và 7, Jack nhận viên kẹo đầu tiên. Cặp thứ tư cũng lật hai lá ấy nhưng không đem lại thêm kẹo. Các lời gọi ở giữa đã được lược bớt; cặp cuối cùng đem lại viên kẹo thứ 25. Sau mỗi cặp lời gọi, trình chấm tự úp lại hai lá.

Chi tiết triển khai

Gói LQDOJ nhận một tệp C++ cài đặt play, sử dụng memory.h (bao gồm khai báo faceup). Tệp mẫu được cung cấp trong templates.zip. Đề gốc hỗ trợ memory.c, memory.cpp hoặc memory.pas, dùng giao diện memory.h/memory.pasgrader.h/graderlib.pas, trong thư mục /home/ioi2010-contestant/memory/. Các lệnh runc grader.cpp, submit grader.cpp và phím Control-R/Control-J thuộc môi trường thi năm 2010; trên LQDOJ, nộp tệp lời giải qua giao diện nộp bài.

Nguồn

IOI 2010, ngày 2, bài 1 — Memory. Đề chính thức, PDF tiếng Anh.

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: