1. Tóm tắt đề
Có quả bóng được đánh số từ , quả thứ có màu . Có màu được đánh số từ , trong đó với mỗi màu, có ít nhất quả bóng có màu đó.
Bạn chỉ được biết số , không được biết mảng và số màu .
Với mỗi câu hỏi, bạn có thể chọn một tập con gồm một số quả bóng trong quả, sau đó bạn sẽ được biết số lượng màu khác nhau trong các quả bóng được chọn có lớn hơn hoặc bằng hay không.
Yêu cầu: Trả ra một mảng sử dụng ít câu hỏi nhất có thể, trong đó:
- .
- Với mọi cặp số , nếu .
Scoring:
- Subtask : .
- Subtask : .
- Subtask : .
Tính điểm: Nếu trong bất kỳ trường hợp thử nghiệm nào, chương trình của bạn trả về cấu hình không thỏa mãn yêu cầu đề bài thì bạn sẽ không nhận được điểm cho test đó. Ngược lại, gọi là số câu hỏi mà bạn sử dụng:
- : số điểm.
- : số điểm.
- : số điểm.
2. Subtask 1
Mỗi câu hỏi chỉ cần hỏi cặp sẽ biết hay . Từ đây dễ dàng tìm được mảng .
3. Subtask 2
Hỏi toàn bộ câu hỏi có thể ( câu hỏi). Từ đây có thể suy ra mảng .
4. Subtask 3
Ta chia mảng thành tập và , trong đó:
- Tập có màu phân biệt.
- Tập có màu phân biệt.
Dễ thấy có thể làm điều này trong câu hỏi bằng cách nạp dần các phần tử vào tập , nếu không thỏa thì đẩy qua tập .
Sau đó, ta tìm các “điểm cắt” của tập , tức là tìm các điểm , trong đó:
- có màu phân biệt.
- có màu phân biệt.
Có thể làm điều này bằng cách bỏ dần phần tử ở tập cho đến khi tập kết hợp với một số phần tử của tập có ít hơn màu phân biệt. Sau đó thêm lại một số phần tử của vào để trở về số màu ban đầu.
Sau khi tìm được các điểm cắt, có thể dễ dàng sử dụng chặt nhị phân để tìm mảng .
Cách này tốn khoảng câu hỏi trong trường hợp xấu nhất. Tuy nhiên, nếu ta shuffle mảng trước khi hỏi thì chỉ mất khoảng câu hỏi.