Back to Blog

Blog note

Chọn đội tuyển Olympic 2026 môn Tin học, Ngày 1, Bài 2

Lời giải bài 2, ngày 1, đề thi chọn đội tuyển Olympic 2026 môn Tin học.

1. Tóm tắt đề

NN quả bóng được đánh số từ 00, quả thứ ii có màu AiA_i. Có K(3KN)K (3 \leq K \leq N) màu được đánh số từ 00, trong đó với mỗi màu, có ít nhất 11 quả bóng có màu đó.

Bạn chỉ được biết số NN, không được biết mảng AA và số màu KK.

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 NN 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 K+12\lfloor \frac{K + 1}{2} \rfloor hay không.

Yêu cầu: Trả ra một mảng BB sử dụng ít câu hỏi nhất có thể, trong đó:

  • 0Bi<K0 \leq B_i < K.
  • Với mọi cặp số (i,j)(i, j), nếu Ai=AjBi=BjA_i = A_j \Leftrightarrow B_i = B_j.

Scoring:

  • Subtask 1(10%)1 (10\%): N10,K=3N \leq 10, K = 3.
  • Subtask 2(20%)2 (20\%): N10N \leq 10.
  • Subtask 3(70%)3 (70\%): N256N \leq 256.

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 PP là số câu hỏi mà bạn sử dụng:

  • P1400P \leq 1400: 100%100\% số điểm.
  • 1400P140001400 \leq P \leq 14000: 1400P×100%\frac{1400}{P} \times 100\% số điểm.
  • P>14000P > 14000: 0%0\% số điểm.

2. Subtask 1

Mỗi câu hỏi chỉ cần hỏi 22 cặp i,ji, j sẽ biết Ai=AjA_i = A_j hay AiAjA_i \neq A_j. Từ đây dễ dàng tìm được mảng BB.

3. Subtask 2

Hỏi toàn bộ câu hỏi có thể (2N2^N câu hỏi). Từ đây có thể suy ra mảng BB.

4. Subtask 3

Ta chia mảng AA thành 22 tập XXYY, trong đó:

  • Tập XXK+121\lfloor \frac{K + 1}{2} \rfloor - 1 màu phân biệt.
  • Tập YYK(K+121)K - \left(\lfloor \frac{K + 1}{2} \rfloor - 1\right) màu phân biệt.

Dễ thấy có thể làm điều này trong NN câu hỏi bằng cách nạp dần các phần tử vào tập XX, nếu không thỏa thì đẩy qua tập YY.

Sau đó, ta tìm các “điểm cắt” của tập XX, tức là tìm các điểm i1,i2,i_1, i_2, \dots, trong đó:

  • X0,X1,,Xi1X_0, X_1, \dots, X_{i_1}11 màu phân biệt.
  • X0,X1,,Xi2X_0, X_1, \dots, X_{i_2}22 màu phân biệt.
\dots

Có thể làm điều này bằng cách bỏ dần phần tử ở tập XX cho đến khi tập XX kết hợp với một số phần tử của tập YY có ít hơn K+12\lfloor \frac{K + 1}{2} \rfloor màu phân biệt. Sau đó thêm lại một số phần tử của YY vào XX để XX 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 BB.

Cách này tốn khoảng 15001500 câu hỏi trong trường hợp xấu nhất. Tuy nhiên, nếu ta shuffle mảng AA trước khi hỏi thì chỉ mất khoảng 13501350 câu hỏi.