IOI 2010 - Hotter Colder
Xem PDFJack và Jill chơi trò Nóng hơn, Lạnh hơn. Jill bí mật chọn một số nguyên từ 1 đến N, còn Jack liên tục đoán số đó.
Mỗi giá trị Jack đoán phải nằm trong đoạn từ 1 đến N. Với lần đoán đầu tiên, Jill luôn trả lời bằng nhau. Từ lần đoán thứ hai trở đi, Jill trả lời:
- nóng hơn nếu lần đoán hiện tại gần số bí mật hơn lần đoán trước;
- lạnh hơn nếu lần đoán hiện tại xa số bí mật hơn lần đoán trước;
- bằng nhau nếu hai khoảng cách bằng nhau.
Bạn cần cài đặt hàm HC(N) đóng vai Jack. Hàm này có thể gọi Guess(G) nhiều lần, với 1 <= G <= N. Hàm Guess trả về 1, -1 hoặc 0, lần lượt tương ứng với nóng hơn, lạnh hơn và bằng nhau. Hàm HC phải trả về đúng số Jill đã chọn.
Ví dụ
Giả sử N = 5 và Jill chọn số 2:
| Lời gọi | Giá trị trả về | Giải thích |
|---|---|---|
Guess(5) |
0 |
Lần gọi đầu tiên |
Guess(3) |
1 |
Nóng hơn |
Guess(4) |
-1 |
Lạnh hơn |
Guess(1) |
1 |
Nóng hơn |
Guess(3) |
0 |
Hai khoảng cách bằng nhau |
Sau các lời gọi trên, HC phải trả về 2.
Các nhóm điểm
| Nhóm | Điểm | Giới hạn |
|---|---|---|
| 1 | 25 | 1 <= N <= 500; không quá 500 lời gọi Guess; tối đa 125250 lần gọi HC. |
| 2 | 25 | 1 <= N <= 500; không quá 18 lời gọi Guess; tối đa 125250 lần gọi HC. |
| 3 | 25 | 1 <= N <= 500; không quá 16 lời gọi Guess; tối đa 125250 lần gọi HC. |
| 4 | tối đa 25 | 1 <= N <= 500000000; tối đa 1000000 lần gọi HC; điểm phụ thuộc số lời gọi như dưới đây. |
Trong nhóm 4, gọi W là số nguyên lớn nhất thỏa mãn
Với mỗi lần gọi HC, đặt q là số lần gọi Guess. Điểm của nhóm được xác định bởi trường hợp tệ nhất:
- 0 điểm nếu
q >= 2W; - \(25\alpha\) điểm nếu \(0 < \alpha < 1\) là giá trị lớn nhất sao cho \(q \le 2W - \alpha W\);
- 25 điểm nếu
q <= W.
Mọi biến trạng thái của HC phải được khởi tạo lại cho từng lần gọi.
Chi tiết cài đặt
Bạn cần nộp một tệp C++ cài đặt:
int HC(int N);
Tệp của bạn được biên dịch cùng hottercolder.h, trong đó có khai báo:
int Guess(int G);
Chương trình của bạn không được định nghĩa hàm main.
Kỳ thi:
- IOI 2010 - Ngày 1 (16 Tháng 8., 2010)
Bình luận