Editorial for Trở về tuổi thơ


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Author: Yunan

Gọi x là trạng thái nửa phải của dãy mảnh ghép hiện tại, x=0 nếu nửa phải lõm vào và x=1 nếu nửa phải nhô ra.

Nhận xét: Nếu lựa chọn mảnh loại 2 hoặc 3 để tiếp tục ghép vào, trạng thái x không thay đổi (vẫn duy trì nửa phải lõm vào hoặc nhô ra). Ngược lại nếu lựa chọn mảnh 1 hoặc 4, trạng thái x sẽ thay đổi (0 thành 11 thành 0).

Đầu tiên, đưa mảnh 5 hoặc 6 vào dãy mảnh ghép hiện tại. Bài toán có thể giải quyết bằng tham lam để lần lượt ghép các mảnh: lựa chọn mảnh có thể ghép được và có giá trị nhỏ nhất để ghép vào dãy hiện tại. Sau khi kết thúc ghép tham lam sẽ còn dư một số mảnh chưa được ghép, các mảnh còn dư này đều có nửa trái lõm vào hoặc đều có nửa trái nhô ra. Nếu trong số các mảnh còn dư có mảnh loại 1 hoặc 4 thì không tồn tại cách ghép toàn bộ các mảnh. Vì vậy, ta xét trường hợp các mảnh còn dư đều thuộc loại 2 hoặc các mảnh còn dư đều thuộc loại 3. Vì việc ghép mảnh loại 2 hoặc 3 không làm thay đổi trạng thái x, nên ta chỉ cần tìm vị trí có thể ghép được đầu tiên từ phải sang của dãy hiện tại để chèn vào (nếu không tồn tại vị trí như vậy thì hiển nhiên không tồn tại cách ghép toàn bộ các mảnh). Cuối cùng sau khi đã ghép đủ n-1 mảnh, kiểm tra xem có thể ghép mảnh loại 7 hoặc 8 vào dãy hay không.

Độ phức tạp: O(n).


Comments