trang chủ / bài tập / readtime

Thời gian đọc ổ cứng

Đề bài

Mô tả

Một ổ cứng có n đầu đọc hoạt động song song. Các rãnh (track) của ổ cứng được đánh số bằng các số nguyên từ trái sang phải. Ban đầu đầu đọc thứ i nằm trên rãnh hi.

Trong mỗi giây, phần sụn của ổ cứng có thể cho mỗi đầu đọc dịch sang trái đúng một rãnh, dịch sang phải đúng một rãnh, hoặc đứng yên. Các đầu đọc di chuyển hoàn toàn độc lập với nhau: chúng có thể đổi thứ tự tương đối cho nhau, và nhiều đầu đọc có thể cùng nằm trên một rãnh.

Một rãnh được coi là đã đọc nếu có ít nhất một đầu đọc từng đi qua rãnh đó. Nói riêng, ngay tại thời điểm ban đầu các rãnh h1,h2,,hn đã được đọc.

Cần đọc m rãnh phân biệt mang số hiệu p1,p2,,pm. Hãy tìm thời gian ít nhất để đọc được tất cả các rãnh này. Việc đọc thêm những rãnh khác là được phép.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm: số đầu đọc và số rãnh cần đọc.
  • Dòng thứ hai chứa n số nguyên h1<h2<<hn: vị trí ban đầu của các đầu đọc.
  • Dòng thứ ba chứa m số nguyên p1<p2<<pm: số hiệu các rãnh cần đọc.

Dữ liệu ra

Một số nguyên duy nhất: thời gian ít nhất (tính bằng giây) để đọc hết tất cả các rãnh yêu cầu.

Ràng buộc

  • 1n,m105
  • 1hi1010hi<hi+1
  • 1pi1010pi<pi+1

Ví dụ

Input Output Giải thích
3 4
2 5 6
1 3 6 8
2 Trong 2 giây: đầu đọc thứ nhất đi sang trái 1 rãnh (đọc rãnh 1), đầu đọc thứ hai đi sang trái 2 rãnh (đọc rãnh 4 rồi rãnh 3), đầu đọc thứ ba đi sang phải 2 rãnh (đọc rãnh 7 rồi rãnh 8); rãnh 6 đã được đọc ngay từ đầu. Không thể xong trong 1 giây vì đầu đọc gần rãnh 8 nhất cách nó 2 rãnh.
3 3
1 2 3
1 2 3
0 Mọi rãnh cần đọc đều đã có sẵn đầu đọc, không cần di chuyển.
1 2
165
142 200
81 Chỉ có một đầu đọc, nó phải đi sang trái tới rãnh 142 (mất 23 giây) rồi quay sang phải tới rãnh 200 (mất thêm 58 giây), tổng cộng 81 giây. Nếu đi sang phải trước rồi quay lại thì mất 35+58=93 giây.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0