Cách làm 300 của mình:
Dựng đồ thị 2 phía, switch và lamp, giữa 2 đỉnh có cạnh nếu switch i có thể tương ứng với lamp j.
Ban đầu tất cả đều có cạnh. Với mỗi experiment, những cặp switch và lamp cho ra giá trị khác nhau sẽ bị xóa cạnh.
Nếu không thể tìm 1 cách gán mỗi switch vào mỗi lamp trên đồ thị còn lại (nghĩa là không thể tìm 1 bộ ghép đầy đủ) thì trả về -1.
Ngược lại đồ thị sẽ chia thành các vùng liên thông, mỗi vùng có số switch = số lamp.
1. Số experiment cần thêm cho vùng có x switch sẽ bằng min(i) thỏa 2^i >= x. (chỗ này mình fail vì chỉ nghĩ là x-1

)
CM: Mỗi experiment ta lấy x/2 đỉnh của vùng đó -> chia thành 2 vùng con có x/2 và x-x/2 đỉnh.
2. Kết quả là max experiment của các vùng.
CM: Do các vùng không liên quan với nhau nên có thể gộp chung experiment làm cùng lúc.