Hướng dẫn giải của Bò chen chúc
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.
Lời giải: Bò chen chúc
Hướng tiếp cận
Sắp xếp các con bò theo vị trí, sau đó dùng hai cửa sổ trượt (sliding window) với multiset để theo dõi chiều cao lớn nhất bên trái và bên phải trong khoảng cách .
Nhận xét quan trọng
- Sau khi sắp xếp theo vị trí, ta có thể duyệt từ trái sang phải và duy trì hai multiset:
- Multiset X: chứa chiều cao các bò trong khoảng (bên trái).
- Multiset Y: chứa chiều cao các bò trong khoảng (bên phải).
- Phần tử lớn nhất trong multiset chính là phần tử cuối, kiểm tra trong .
Thuật toán
- Sắp xếp bò theo vị trí tăng dần.
- Duyệt từ trái sang phải. Duy trì hai con trỏ (biên trái cho multiset X) và (biên phải cho multiset Y).
- Với mỗi bò :
- Thêm các bò vào Y cho đến khi vượt quá .
- Loại các bò ra khỏi X nếu khoảng cách vượt quá .
- Thêm bò vào X.
- Kiểm tra: max(X) VÀ max(Y) .
- Loại bò khỏi Y.
- Đếm tổng số bò thỏa mãn.
Độ phức tạp
- Thời gian:
- Bộ nhớ:
Bình luận