You are on page 1of 1

SEAT

Nguyễn Đinh Quang Minh

Trường hợp p <= 2 có thể thử tay rất dễ (đáp án chỉ từ 0 đến 2), ta sẽ không bàn đến ở đây.
Phần dưới là lời giải cho p = 3.
Để cho đơn giản, ta coi như các số được đánh từ 0..N-1, vòng tròn bắt đầu từ 0 và kết thúc
bằng một trong các số 1, 2, 3.
Gọi F1​(x) là số hoán vị của các số từ x..N-1, thỏa mãn điều kiện và bắt đầu ở x, kết thúc ở x+1.
Tương tự có F2​(x), F​3​(x). Ta có thể dễ dàng tính các F khi x = N-1. Làm sao để tính F1​(x) dựa
vào các F lớn hơn?
Giả sử ta cần tính F1​(0). Một hoán vị P thỏa mãn sẽ trông như thế nào? Có một vài trường hợp
xảy ra:
P = { 0, 2, …, 1 }
P = { 0, 3, …, 2, 1 }
P = { 0, 3, 2, 5, …, 4, 1 }
P = { 0, 3, 6, …, 5, 2, 4, 1 }
Chúng đều có chung một đặc điểm: tồn tại một phần có dạng “x+1, …, x”. Như vậy, công thức
tính F​1​(x) là:
F​1​(x) = G​1​(x+1) + G​1​(x+2) + G​1​(x+4) + G​1​(x+5),
Trong đó G​1​(x) là số hoán vị của các số từ x..N-1, thỏa mãn điều kiện và bắt đầu ở x+1, kết thúc
ở x.
F​1​(x) và G​1​(x) có bằng nhau không? Trong trường hợp không có các ràng buộc (u, v) bổ
sung, hoặc các ràng buộc này có tính 2 chiều, câu trả lời là có. Tuy nhiên rất tiếc bài toán lại
cho ràng buộc (u, v) là một chiều nên ta buộc phải tính G1​(x) riêng, với công thức tương tự:
G​1​(x) = F​1​(x+1) + F​1​(x+2) + F​1​(x+4) + F​1​(x+5),
Hai công thức trên khác nhau ở chỗ nào? Đừng quên bạn phải kiểm tra xem những số được
điền vào 2 đầu của hoán vị có thỏa mãn hay không (VD phải kiểm tra (0, 2) không bị cấm thì
mới tăng G1​(x+1) vào F​1​(x)).
Tương tự, ta sẽ có cách tính F2​(x), F​3​(x), G​2​(x), G​3​(x).
Làm sao để có base case? Backtrack tất cả giá trị F và G với x từ N-6 đến N-1.
Code đã AC (WARNING: /r/codegore)​ ​https://pastebin.com/wb1ZqcMh

You might also like