Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng tiếp cận
Hai đèn lặp lại trạng thái (cặp màu) sau mỗi ngày. Trong một chu kỳ ta đếm số ngày cùng màu, từ đó suy ra số ngày khác màu, rồi định vị ngày thứ khác màu.
Nhận xét quan trọng
- Chu kỳ chung: trạng thái hệ thống lặp với chu kỳ . Đặt .
- Ngày cùng màu: với mỗi màu xuất hiện trong cả hai dãy, gọi là vị trí (1-based) trong và trong . Ngày cùng màu khi:
- CRT: hệ trên có nghiệm khi và chỉ khi . Khi có nghiệm, có duy nhất một thoả mãn (tìm bằng thuật toán Euclid mở rộng).
- Đếm ngày khác màu: gọi là số màu chung tạo ra ngày cùng màu trong . Số ngày khác màu trong một chu kỳ là .
Thuật toán
- Tính , .
- Lập từ điển vị trí . Với mỗi , kiểm tra có trong không, nếu có thì thử CRT để lấy ngày và thêm vào danh sách
matches. - Sắp xếp
matches. Số ngày khác màu mỗi chu kỳ: . - Số chu kỳ đầy đủ: . Còn lại: .
- Trong một chu kỳ, duyệt qua các đoạn ngày khác màu giữa các phần tử của
matches(với làm sentinel) để tìm ngày khác màu thứ . Đáp án là .
Độ phức tạp
- Thời gian: chính cho sắp xếp
matchesvà tra cứu hashmap. - Bộ nhớ: .
Bình luận