JOI 2024 - Escape Route 2

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: 2600 (p) Thời gian: 3.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Vương quốc IOI gồm \(N\) thành phố nằm trên một đường từ tây sang đông, được đánh số từ \(1\) đến \(N\) theo thứ tự từ phía tây.

Ở vương quốc IOI, đơn vị thời gian là Byou và một ngày dài \(T\) Byou. Thời điểm đã trôi qua \(x\) Byou kể từ đầu ngày, với \(0 \le x < T\), được gọi là thời điểm \(x\). Vì vậy, sau một Byou kể từ thời điểm \(T-1\) của một ngày là thời điểm \(0\) của ngày tiếp theo.

JOI là một tổ chức bí mật hoạt động trong vương quốc IOI. Các thành viên phải tránh những trạm kiểm soát của vương quốc, nên khi di chuyển giữa các thành phố, họ chỉ được sử dụng các chuyến bay của hãng hàng không JOY.

Hãng JOY khai thác \(M_i\) chuyến bay khởi hành từ thành phố \(i\) \((1 \le i \le N-1)\). Chuyến bay thứ \(j\) \((1 \le j \le M_i)\) khởi hành từ thành phố \(i\) vào thời điểm \(A_{i,j}\) mỗi ngày và đến thành phố \(i+1\) vào thời điểm \(B_{i,j}\) trong cùng ngày, với \(A_{i,j}<B_{i,j}\). Việc nối chuyến rất thuận tiện: một người có thể khởi hành đúng lúc vừa đến một thành phố. Người đó cũng có thể chờ qua đêm tại sân bay của bất kỳ thành phố nào.

Tổ chức có \(Q\) thành viên, được đánh số từ \(1\) đến \(Q\). Thành viên \(k\) có căn cứ hoạt động ở thành phố \(L_k\) và nơi sinh sống ở thành phố \(R_k\). Người đó muốn biết thời gian ngắn nhất tính từ lúc rời thành phố \(L_k\) đến lúc tới thành phố \(R_k\), khi được tự chọn thời điểm khởi hành và các chuyến bay sẽ sử dụng.

Cho thông tin về các chuyến bay và các thành viên, hãy tính thời gian ngắn nhất cho từng thành viên.

Dữ liệu vào

Đọc từ đầu vào chuẩn theo định dạng:

N T
M_1
A_{1,1} B_{1,1}
...
A_{1,M_1} B_{1,M_1}
M_2
A_{2,1} B_{2,1}
...
A_{2,M_2} B_{2,M_2}
...
M_{N-1}
A_{N-1,1} B_{N-1,1}
...
A_{N-1,M_{N-1}} B_{N-1,M_{N-1}}
Q
L_1 R_1
...
L_Q R_Q

Dữ liệu ra

In \(Q\) dòng. Dòng thứ \(k\) chứa thời gian ngắn nhất để thành viên \(k\) đi từ thành phố \(L_k\) đến thành phố \(R_k\), tính bằng Byou nhưng không in tên đơn vị.

Ràng buộc

  • \(2 \le N \le 100\,000\).
  • \(2 \le T \le 10^9\).
  • \(M_i \ge 1\) với mọi \(1 \le i \le N-1\).
  • \(M_1+M_2+\cdots+M_{N-1} \le 100\,000\).
  • \(0 \le A_{i,j}<B_{i,j}<T\) với mọi \(1 \le i \le N-1\), \(1 \le j \le M_i\).
  • \(1 \le Q \le 300\,000\).
  • \(1 \le L_k<R_k \le N\) với mọi \(1 \le k \le Q\).
  • Tất cả giá trị đầu vào đều là số nguyên.

Phân nhóm

  • Nhóm 1 (6 điểm): \(N \le 2\,000\)\(M_i=1\) với mọi \(i\).
  • Nhóm 2 (8 điểm): \(N \le 2\,000\)\(M_i \le 5\) với mọi \(i\).
  • Nhóm 3 (17 điểm): \(M_i=1\) với mọi \(i\).
  • Nhóm 4 (23 điểm): \(M_i \le 5\) với mọi \(i\).
  • Nhóm 5 (36 điểm): \(N \le 90\,000\), \(Q \le 90\,000\)\(M_1+\cdots+M_{N-1} \le 90\,000\).
  • Nhóm 6 (10 điểm): Không có ràng buộc bổ sung.

Ví dụ

Ví dụ 1

Input
4 10000
1
100 300
2
200 400
300 600
1
500 600
3
1 3
2 4
1 4
Output
500
400
10500
Giải thích

Gọi ngày thành viên \(k\) rời thành phố \(L_k\) là ngày thứ nhất.

Thành viên \(1\) có thể đi từ thành phố \(1\) đến thành phố \(3\) trong \(500\) Byou:

  1. Rời thành phố \(1\) lúc \(100\) ngày thứ nhất, đến thành phố \(2\) lúc \(300\) cùng ngày.
  2. Rời thành phố \(2\) lúc \(300\) ngày thứ nhất, đến thành phố \(3\) lúc \(600\) cùng ngày.

Không có cách đi nhanh hơn, nên dòng đầu tiên là 500.

Thành viên \(2\) có thể đi từ thành phố \(2\) đến thành phố \(4\) trong \(400\) Byou:

  1. Rời thành phố \(2\) lúc \(200\) ngày thứ nhất, đến thành phố \(3\) lúc \(400\) cùng ngày.
  2. Rời thành phố \(3\) lúc \(500\) ngày thứ nhất, đến thành phố \(4\) lúc \(600\) cùng ngày.

Không có cách đi nhanh hơn, nên dòng thứ hai là 400.

Thành viên \(3\) có thể đi từ thành phố \(1\) đến thành phố \(4\) trong \(10\,500\) Byou:

  1. Rời thành phố \(1\) lúc \(100\) ngày thứ nhất, đến thành phố \(2\) lúc \(300\) cùng ngày.
  2. Rời thành phố \(2\) lúc \(300\) ngày thứ nhất, đến thành phố \(3\) lúc \(600\) cùng ngày.
  3. Rời thành phố \(3\) lúc \(500\) ngày thứ hai, đến thành phố \(4\) lúc \(600\) cùng ngày.

Không có cách đi nhanh hơn, nên dòng thứ ba là 10500.

Ví dụ này thỏa mãn các nhóm \(2,4,5,6\).

Ví dụ 2

Input
6 10000
1
100 300
1
400 700
1
500 600
1
300 900
1
200 800
1
1 6
Output
30700
Giải thích

Ví dụ này thỏa mãn tất cả các nhóm.

Nguồn

JOI 2023/2024, kỳ thi tuyển chọn mùa xuân, ngày thi thứ tư (24/03/2024). Đề của Ủy ban Olympic Tin học Nhật Bản (JCIOI). Bản dịch tiếng Việt theo giấy phép CC BY-SA 4.0.

Tệp

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: