Mô phỏng lập lịch đĩa SCAN (thuật toán thang máy / elevator) và tính tổng quãng đường di chuyển đầu đọc.
Đầu đọc bắt đầu ở start và đi theo hướng tăng (lên phía track lớn) trước. Nó phục vụ mọi yêu cầu ≥ start theo thứ tự tăng dần, đi tới biên trên disk_max (track lớn nhất của đĩa), rồi đảo chiều đi xuống phục vụ các yêu cầu < start theo thứ tự giảm dần.
Lưu ý: chỉ chạm biên disk_max nếu còn yêu cầu ở phía dưới cần phục vụ sau khi đảo chiều (theo mô tả chuẩn của SCAN: đầu đọc chạm biên rồi mới quay lại).
Thuật toán:
right (≥ start, sắp tăng) và left (< start, sắp tăng).right tăng dần (cộng khoảng cách, dời đầu đọc).left: đi tới disk_max (cộng |disk_max - cur|), rồi phục vụ left giảm dần.Ví dụ: start=50, disk_max=199, yêu cầu 82 170 43 140. right=[82,140,170], left=[43]. Đi 50→82→140→170 (=120), →199 (=29), →43 (=156). Tổng = 120+29+156 = 305.
Dòng 1: n, start, disk_max. Dòng 2: n số — các yêu cầu.
1 ≤ n ≤ 100000; 0 ≤ yêu cầu ≤ disk_max ≤ 1000000; 0 ≤ start ≤ disk_max.
Một số nguyên: tổng quãng đường di chuyển.
Ví dụ:
Đầu vào:
4 50 199
82 170 43 140
Đầu ra:
305
Giải thích:
Đang tải editor...