BOI 2024 - Fire

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2100 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Trong tín ngưỡng Baltic cổ, việc giữ cho ngọn lửa thiêng luôn cháy có ý nghĩa quan trọng. Một vị tư tế được gọi là krivis có trách nhiệm bảo vệ ngọn lửa, không để nó tắt. Ông có nhiều nữ trợ tá đáng tin cậy, được gọi là vaidilutės, và muốn lập lịch để họ tiếp lửa và trông coi ngọn lửa. Ông phải bảo đảm luôn có một vaidilutė chăm sóc ngọn lửa.

Krivis sử dụng hệ thống đo thời gian riêng, trong đó mỗi ngày có \(M\) phút. Trong làng có \(N\) vaidilutės. Khoảng thời gian mà vaidilutė thứ \(i\) có thể làm việc được mô tả bởi hai số nguyên \(s_i\)\(e_i\). Số \(s_i\) là thời điểm sớm nhất trong ngày mà cô có thể bắt đầu làm việc, còn \(e_i\) là thời điểm muộn nhất trong ngày mà cô phải kết thúc công việc. Thời gian được tính bằng số phút kể từ đầu ngày. Lưu ý rằng nếu \(s_i>e_i\), cô sẵn sàng làm việc qua đêm.

Krivis nhờ bạn chọn một số vaidilutės và sắp xếp ca làm việc cho họ. Mỗi vaidilutė được chọn phải bắt đầu ca không sớm hơn \(s_i\) và kết thúc ca không muộn hơn \(e_i\). Một ca làm việc luôn ngắn hơn một ngày trọn vẹn. Những vaidilutės được chọn sẽ lặp lại ca làm việc của mình hằng ngày.

Việc bàn giao công việc giữa hai vaidilutės làm tăng nguy cơ ngọn lửa bị tắt. Vì vậy, bạn muốn giảm thiểu số lần bàn giao trong ngày bằng cách lập lịch cần ít vaidilutės nhất có thể.

Hãy tính số vaidilutės ít nhất cần chọn để ngọn lửa thiêng được chăm sóc tại mọi thời điểm.

Dữ liệu vào

Dòng đầu tiên chứa hai số nguyên \(N\)\(M\), lần lượt là số vaidilutės có thể làm việc và số phút trong một ngày.

Tiếp theo là \(N\) dòng. Dòng thứ \(i\) chứa hai số nguyên \(s_i\)\(e_i\), lần lượt là thời điểm bắt đầu sớm nhất và thời điểm kết thúc muộn nhất của vaidilutė thứ \(i\).

Dữ liệu ra

In ra một số nguyên là số vaidilutės ít nhất cần chọn. Nếu không thể chọn các vaidilutės để đáp ứng yêu cầu, in ra \(-1\).

Ràng buộc

  • \(1\le N\le 2\cdot 10^5\).
  • \(2\le M\le 10^9\).
  • \(0\le s_i,e_i<M\) với mọi \(1\le i\le N\).
  • \(s_i\ne e_i\) với mọi \(1\le i\le N\).

Phân nhóm

  1. \(14\) điểm: \(N\le 20\).
  2. \(17\) điểm: \(N\le 300\).
  3. \(9\) điểm: \(N\le 5000\).
  4. \(13\) điểm: với mọi \(1\le i\le N\), \(s_i<e_i\) hoặc \(e_i=0\).
  5. \(21\) điểm: khoảng thời gian từ \(s_i\) đến \(e_i\) có cùng độ dài đối với mọi vaidilutė, tính cả trường hợp khoảng thời gian đi qua nửa đêm.
  6. \(26\) điểm: không có ràng buộc bổ sung.

Ví dụ

Ví dụ 1

Input
4 100
10 30
30 70
20 40
60 20
Output
3
Giải thích

Có thể chọn các vaidilutės thứ \(1\), \(2\)\(4\), rồi sắp xếp ca làm việc như sau:

  • Vaidilutė thứ \(1\) làm việc từ phút thứ \(10\) đến phút thứ \(30\).
  • Vaidilutė thứ \(2\) làm việc từ phút thứ \(30\) đến phút thứ \(70\).
  • Vaidilutė thứ \(4\) làm việc từ phút thứ \(70\) đến phút thứ \(10\) của ngày hôm sau.

Ví dụ 2

Input
1 100
30 40
Output
-1
Giải thích

Không thể lập lịch vì chỉ có một vaidilutė và cô không thể làm việc suốt cả ngày.

Bình luận

Mới nhất
Tải bình luận...

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

Kỳ thi: