Hướng dẫn cho Dư đoạn


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.

Authors: ngpin_04

Ta có một thuật toán như sau:

  • Duyệt các điểm \(i\) theo thứ tự từ \(0\) đến \(10^6\).
  • Nếu gặp một đầu mút trái của một đoạn thì sẽ add đoạn đó vào một tập.
  • Khi đó kích thước của tập sẽ là số lượng đoạn đang che phủ điểm đó, nếu tập lớn hơn \(k\) thì ta cần xóa một vài đoạn trong tập (và đoạn đó sẽ là một trong các đoạn sẽ bị loại bỏ).
  • Sau đó, kiểm tra các đầu mút phải và nếu đoạn thuộc đầu mút phải đó vẫn còn nằm trong tập thì ta sẽ không loại bỏ và xóa đoạn đó ra khỏi tập.

Nhận xét: phần quan trọng của thuật toán này nằm ở bước thứ 3, chính là xóa các đoạn trong tập. Nhận thấy rằng những điểm từ \(0\) đến \(i - 1\) đều được thỏa mãn điều kiện đề bài, nên ta cần xóa đoạn nào che phủ nhiều điểm ở phìa từ \(i\) đến \(10^6\) nhất, hay nói cách khác là đoạn có đầu mút phải lớn nhất.



Bình luận

Không có bình luận nào.