Hướng dẫn giải của Lớp Biến Hình
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
Bài toán yêu cầu tìm số phép biến hình ít nhất để biến bảng thành bảng , trong đó mỗi phép biến hình chọn ô và đảo toàn bộ hình chữ nhật từ đến . Lời giải dựa trên mảng sai phân XOR 2D.
Nhận xét quan trọng
Gộp hai bảng: Đặt . Bài toán trở thành: tìm số phép ít nhất để biến thành toàn
0.Mảng sai phân XOR 2D: Định nghĩa:
(với khi hoặc ). Mảng có tính chất: có thể được phục hồi từ bằng tiền tố XOR 2D.
Tác động của phép biến hình: Phép biến hình tại đảo tất cả với . Trong mảng sai phân, thao tác này chỉ thay đổi đúng 1 ô (toggle giá trị tại đó), vì các thay đổi ở các ô khác triệt tiêu nhau.
Kết quả: Mỗi phép biến hình toggle đúng 1 ô trong . Để đưa về toàn
0, ta cần cũng toàn0. Vậy số phép tối thiểu bằng số ô có giá trị 1 trong mảng sai phân .
Thuật toán
- Đọc hai bảng và .
- Với mỗi ô , tính:
- Đếm số ô có . Đó là đáp án.
Độ phức tạp
- Thời gian: - duyệt qua mỗi ô đúng 1 lần.
- Bộ nhớ: - lưu hai bảng và .
Bình luận