Mô phỏng lập lịch đĩa C-SCAN (Circular SCAN) và tính tổng quãng đường di chuyển đầu đọc.
C-SCAN: đầu đọc đi theo hướng tăng, phục vụ mọi yêu cầu ≥ start tăng dần, tới biên trên disk_max, rồi nhảy thẳng về biên dưới 0 (quãng đường này được tính = disk_max), sau đó tiếp tục đi lên phục vụ các yêu cầu < start theo thứ tự tăng dần.
Thuật toán:
right (≥ start, tăng) và left (< start, tăng).right tăng dần.left: đi tới disk_max (cộng |disk_max - cur|), nhảy về 0 (cộng disk_max), rồi phục vụ left tăng dần từ 0.Ví dụ: start=50, disk_max=199, yêu cầu 82 170 43 140. right=[82,140,170], left=[43]. 50→82→140→170 (=120), →199 (=29), nhảy →0 (=199), 0→43 (=43). Tổng = 120+29+199+43 = 391.
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:
391
Giải thích:
Đang tải editor...