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: LeKienThanh
tag: dp digit, binary search, dp k-th lexicographical string.
Subtask 1:
Chuẩn bị trước các số Ligma. Độ phức tạp: , với là số Ligma thứ .
Subtask 2:
Dễ thấy số Ligma bé thứ là số nguyên dương nhỏ nhất thỏa mãn có ít nhất số Ligma không lớn hơn nó, vì vậy, ta sẽ sử dụng thuật toán chặt nhị phân (trauma thầy T).
Ta cần giải quyết bài toán: cho một số , tìm số lượng số Ligma không lớn hơn . Đây là một bài toán quy hoạch động chữ số kinh điển. Ta sẽ đặt trạng thái như sau: , tuy nhiên, , nên ta có thể lược bỏ chiều .
Độ phức tạp: với mỗi lần quy hoạch động chữ số, nhân với độ phức tạp của chặt nhị phân. Tính ra thì có vẻ lớn, tuy nhiên trên thực tế thuật toán chạy đủ nhanh.
Tài liệu đọc thêm về DP digit
Subtask 3:
Ta sẽ làm tương tự như Sub 2. Tuy nhiên, dễ thấy việc tạo lại bảng DP sau mỗi truy vấn là không cần thiết, mà ta có thể tính trước bảng DP, xong rồi truy vết trên đó để tính nhanh số lượng số Ligma không lớn hơn . ĐPT: cho phần khởi tạo, và với mỗi truy vấn.
Tài liệu đọc thêm về trick DP digit
Subtask 4:
Đây thực chất chính là bài toán: Tìm dãy có thứ tự từ điển thứ thỏa mãn một yêu cầu nào đó. Với những bài toán này, hướng giải chung đều là ta duyệt từ trái qua phải. Với vị trí thứ , ta thử điền số vào, và truy cập bảng DP để xem liệu cách điền vào hậu tố đã vượt quá hay chưa.
ĐPT: cho phần khởi tạo, và với mỗi truy vấn.
Bài tương tự sử dụng kỹ thuật này
Comments