#G00005. Chuyển thang máy (Lift Hopping)
Chuyển thang máy (Lift Hopping)
Chuyển thang máy (Lift Hopping)
Nguồn: UVa Online Judge
Phiên bản: Phước Hưng OJ Extended
Đề bài
Một tòa nhà có nhiều tầng, được đánh số bằng các số nguyên không âm.
Tòa nhà có thang máy. Mỗi thang máy có tốc độ riêng và chỉ dừng tại một số tầng nhất định.
Với thang máy thứ , thời gian cần để di chuyển giữa hai tầng kề nhau là giây. Do đó, nếu thang máy thứ di chuyển trực tiếp từ tầng đến tầng , thời gian di chuyển là
giây.
Bạn đang đứng tại tầng và muốn đến tầng trong thời gian ngắn nhất.
Mỗi thang máy chỉ có thể được sử dụng tại các tầng mà nó dừng. Khi đang ở trong một thang máy, bạn có thể đi qua các tầng trung gian mà không cần dừng lại tại đó.
Ví dụ, nếu một thang máy dừng tại các tầng
thì bạn có thể đi trực tiếp từ tầng đến tầng . Thang máy có thể đi qua các tầng , nhưng bạn chỉ có thể lên hoặc xuống tại các tầng được liệt kê trong danh sách điểm dừng của nó.
Nếu đang ở một tầng mà cả hai thang máy đều dừng, bạn có thể chuyển từ thang máy hiện tại sang thang máy kia. Mỗi lần chuyển từ một thang máy sang một thang máy khác mất đúng giây.
Khi bắt đầu tại tầng , bạn có thể lên bất kỳ thang máy nào dừng tại tầng mà không mất giây. Chi phí giây chỉ được tính khi bạn thực sự chuyển từ một thang máy sang một thang máy khác trong quá trình di chuyển.
Bạn không được sử dụng cầu thang bộ.
Để được xem là đã đến tầng , bạn phải xuống tại tầng từ một thang máy có điểm dừng tại tầng này. Việc một thang máy chỉ đi ngang qua tầng nhưng không dừng tại đó không được xem là đã đến đích.
Nếu , bạn đã đứng tại tầng cần đến ngay từ đầu, vì vậy thời gian cần thiết bằng .
Hãy tìm số giây nhỏ nhất cần thiết để đi từ tầng đến tầng .
Input
-
Dòng đầu chứa hai số nguyên và :
- là số lượng thang máy;
- là tầng cần đến.
-
Dòng thứ hai chứa số nguyên
trong đó là số giây mà thang máy thứ cần để di chuyển qua một tầng.
- Trong dòng tiếp theo, dòng thứ chứa danh sách các tầng mà thang máy thứ dừng.
Các tầng trên mỗi dòng được liệt kê theo thứ tự tăng dần và cách nhau bởi dấu cách.
Số lượng tầng dừng của mỗi thang máy không được ghi riêng trong Input; số lượng này chính là số số nguyên xuất hiện trên dòng tương ứng.
Ví dụ, dòng
0 5 10 12 14 20 25 30
có nghĩa là thang máy tương ứng dừng tại đúng tầng:
Một tầng có thể xuất hiện trong danh sách của nhiều thang máy. Khi đó, tầng này có thể được sử dụng làm nơi chuyển thang.
Output
In ra đúng một dòng.
- Nếu có thể đi từ tầng đến tầng , in ra số giây nhỏ nhất cần thiết.
- Nếu không tồn tại cách di chuyển hợp lệ, in ra:
IMPOSSIBLE
Subtask
Gọi là số tầng dừng của thang máy thứ và đặt
Như vậy, là tổng số điểm dừng được liệt kê trong toàn bộ Input.
- Subtask 1 — 15% — Time Limit: 0.50 giây: ; ; ; mọi tầng dừng thuộc ; .
- Subtask 2 — 20% — Time Limit: 1.00 giây: ; ; ; mọi tầng dừng thuộc ; .
- Subtask 3 — 25% — Time Limit: 1.50 giây: ; ; ; mọi tầng dừng thuộc ; .
- Subtask 4 — 40% — Time Limit: 3.00 giây: ; ; ; mọi tầng dừng thuộc ; .
Ví dụ
Ví dụ 1
Input
2 30
10 5
0 1 3 5 7 9 11 13 15 20 99
4 13 15 19 20 25 30
Output
275
Giải thích
Có hai thang máy.
Thang máy thứ nhất:
- mất giây cho mỗi tầng;
- dừng tại các tầng
Thang máy thứ hai:
- mất giây cho mỗi tầng;
- dừng tại các tầng
Một cách di chuyển tối ưu là:
- Lên thang máy thứ nhất tại tầng .
- Đi từ tầng đến tầng .
- Chuyển sang thang máy thứ hai tại tầng .
- Đi từ tầng đến tầng .
Thời gian đi từ tầng đến tầng bằng thang máy thứ nhất là
giây.
Tầng xuất hiện trong danh sách điểm dừng của cả hai thang máy nên có thể chuyển thang tại đây. Việc chuyển thang mất
giây.
Khoảng cách từ tầng đến tầng là tầng, nên thời gian đi bằng thang máy thứ hai là
giây.
Tổng thời gian:
Vì vậy đáp án là 275.
Ví dụ 2
Input
2 30
10 1
0 5 10 12 14 20 25 30
2 4 6 8 10 12 14 22 25 28 29
Output
285
Giải thích
Có thể thực hiện hành trình sau:
- Đi bằng thang máy thứ nhất từ tầng đến tầng .
- Chuyển sang thang máy thứ hai tại tầng .
- Đi bằng thang máy thứ hai từ tầng đến tầng .
- Chuyển lại sang thang máy thứ nhất tại tầng .
- Đi bằng thang máy thứ nhất từ tầng đến tầng .
Từ tầng đến tầng bằng thang máy thứ nhất mất
giây.
Chuyển thang tại tầng mất giây.
Từ tầng đến tầng bằng thang máy thứ hai mất
giây.
Chuyển thang tại tầng mất thêm giây.
Cuối cùng, đi từ tầng đến tầng bằng thang máy thứ nhất mất
giây.
Tổng cộng:
Vì vậy đáp án là 285.
Ví dụ 3
Input
3 50
10 50 100
0 10 30 40
0 20 30
0 20 50
Output
3920
Giải thích
Một hành trình tối ưu là:
- đi bằng thang máy thứ nhất từ tầng đến tầng ;
- chuyển sang thang máy thứ hai tại tầng ;
- đi từ tầng xuống tầng ;
- chuyển sang thang máy thứ ba tại tầng ;
- đi từ tầng lên tầng .
Thang máy thứ nhất mất
giây.
Sau đó chuyển thang tại tầng , mất giây.
Thang máy thứ hai đi từ tầng xuống tầng , quãng đường tầng, mất
giây.
Tiếp tục chuyển thang tại tầng , mất thêm giây.
Cuối cùng, thang máy thứ ba đi từ tầng đến tầng , quãng đường tầng, mất
giây.
Tổng thời gian là
Do đó đáp án là 3920.
Ví dụ 4
Input
1 1
2
0 2 4 6 8 10
Output
IMPOSSIBLE
Giải thích
Chỉ có một thang máy và nó dừng tại các tầng
Tầng cần đến là tầng .
Mặc dù thang máy đi qua tầng khi di chuyển từ tầng đến tầng , nó không dừng tại tầng . Vì vậy bạn không thể xuống tại tầng này.
Không có thang máy nào khác và cũng không được sử dụng cầu thang bộ, nên không thể đến tầng .
Do đó kết quả là IMPOSSIBLE.