USACO 2018 - Slingshot

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: 4.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Một trong những công việc đồng áng mà bác nông dân John ghét nhất là vận chuyển những lượng lớn phân bò. Để đơn giản hóa quá trình này, ông nghĩ ra một ý tưởng thú vị: thay vì chở phân giữa hai điểm bằng chiếc xe kéo phía sau máy kéo, tại sao không bắn nó qua không trung bằng một chiếc ná bắn phân khổng lồ? (quả thật, liệu có chuyện gì có thể xảy ra chứ...)

Trang trại của bác nông dân John nằm dọc theo một con đường thẳng rất dài, nên mỗi vị trí trong trang trại có thể được mô tả đơn giản bằng vị trí của nó trên con đường này (tương ứng với một điểm trên trục số). Bác nông dân John xây \(N\) chiếc ná (\(1 \leq N \leq 10^5\)), trong đó chiếc ná thứ \(i\) được mô tả bởi ba số nguyên \(x_i\), \(y_i\)\(t_i\), cho biết chiếc ná này có thể bắn phân từ vị trí \(x_i\) đến vị trí \(y_i\) chỉ trong tổng cộng \(t_i\) đơn vị thời gian.

Bác nông dân John có \(M\) đống phân cần vận chuyển (\(1 \leq M \leq 10^5\)). Đống thứ \(j\) cần được chuyển từ vị trí \(a_j\) đến vị trí \(b_j\). Chở phân bằng máy kéo trên quãng đường \(d\) mất \(d\) đơn vị thời gian. Bác nông dân John hy vọng giảm được thời gian này bằng cách cho phép sử dụng tối đa một lần bất kỳ chiếc ná nào khi vận chuyển mỗi đống phân. Thời gian bác nông dân John di chuyển máy kéo mà không chở phân không được tính.

Với mỗi trong số \(M\) đống phân, hãy giúp bác nông dân John xác định thời gian vận chuyển nhỏ nhất có thể, biết rằng ông có thể dùng tối đa một chiếc ná trong quá trình vận chuyển.

Dữ liệu vào

Dòng đầu tiên chứa \(N\)\(M\). Mỗi dòng trong \(N\) dòng tiếp theo mô tả một chiếc ná bằng các số nguyên \(x_i\), \(y_i\)\(t_i\) (\(0 \leq x_i, y_i, t_i \leq 10^9\)). \(M\) dòng cuối mô tả các đống phân cần vận chuyển bằng các số nguyên \(a_j\)\(b_j\).

Dữ liệu ra

In ra \(M\) dòng, mỗi dòng ứng với một đống phân và cho biết thời gian nhỏ nhất cần để vận chuyển đống phân đó.

Ví dụ

Ví dụ 1

Input
2 3
0 10 1
13 8 2
1 12
5 2
20 7
Output
4
3
10
Giải thích

Ở đây, đống phân thứ nhất cần được chuyển từ vị trí \(1\) đến vị trí \(12\). Nếu không dùng ná, việc này sẽ mất \(11\) đơn vị thời gian. Tuy nhiên, khi dùng chiếc ná thứ nhất, cần \(1\) đơn vị thời gian để chuyển phân đến vị trí \(0\) (điểm bắn của chiếc ná), \(1\) đơn vị thời gian để bắn phân qua không trung và hạ xuống vị trí \(10\) (đích đến của chiếc ná), rồi \(2\) đơn vị thời gian để chuyển phân đến vị trí \(12\). Đống phân thứ hai được vận chuyển tốt nhất mà không dùng chiếc ná nào, còn đống phân thứ ba nên được vận chuyển bằng chiếc ná thứ hai.

Nguồn

USACO 2018 February Contest, Platinum — Slingshot

Tác giả bài toán: Brian Dean.

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: