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

Hàng Rào Chia Ô

Đề bài

Mô tả

Cho một mảnh đất hình chữ nhật có kích thước A×B. Trên mảnh đất này có N hàng rào dọc (song song với cạnh chiều cao) và M hàng rào ngang (song song với cạnh chiều rộng), chia mảnh đất thành (N+1)×(M+1) ô hình chữ nhật.

Hàng rào dọc thứ i nằm tại vị trí xi (0<xi<A) và kéo dài toàn bộ chiều cao B. Hàng rào ngang thứ j nằm tại vị trí yj (0<yj<B) và kéo dài toàn bộ chiều rộng A.

Bạn muốn dỡ bỏ một số đoạn hàng rào sao cho tất cả các ô đều thông với nhau (từ bất kỳ ô nào có thể di chuyển sang bất kỳ ô nào khác). Mỗi hàng rào dọc có độ dài B, mỗi hàng rào ngang có độ dài A, nhưng khi dỡ bỏ, bạn chỉ cần dỡ một đoạn trên hàng rào đó để nối hai ô liền kề (đoạn dỡ có độ dài bằng kích thước của ô theo chiều vuông góc).

Cụ thể, để nối hai ô liền kề theo chiều ngang (cùng hàng, ngăn cách bởi một hàng rào dọc), chi phí bằng chiều cao của ô đó (khoảng cách giữa hai hàng rào ngang liền kề). Để nối hai ô liền kề theo chiều dọc (cùng cột, ngăn cách bởi một hàng rào ngang), chi phí bằng chiều rộng của ô đó (khoảng cách giữa hai hàng rào dọc liền kề).

Hãy tìm tổng độ dài hàng rào nhỏ nhất cần dỡ bỏ để tất cả các ô thông nhau.

Dữ liệu vào

  • Dòng đầu: bốn số nguyên A, B, N, M.
  • Dòng thứ hai: N số nguyên x1,x2,,xN — vị trí các hàng rào dọc.
  • Dòng thứ ba: M số nguyên y1,y2,,yM — vị trí các hàng rào ngang.

Dữ liệu ra

In ra một số nguyên duy nhất — tổng độ dài hàng rào nhỏ nhất cần dỡ bỏ.

Ràng buộc

  • 1A,B109
  • 1N,M2000 (trong một số test, N,M25000)
  • Các vị trí hàng rào đôi một phân biệt và nằm trong khoảng hợp lệ.

Ví dụ

Input Output Giải thích
15 15 5 2
2
5
10
6
4
11
3
44 Xem giải thích bên dưới.

Giải thích ví dụ 1:

Mảnh đất 15×15 được chia bởi 5 hàng rào dọc tại vị trí {2,4,5,6,10} và 2 hàng rào ngang tại vị trí {3,11}.

Các khoảng cách giữa các hàng rào dọc (sau khi sắp xếp: 0,2,4,5,6,10,15) là: 2,2,1,1,4,5.

Các khoảng cách giữa các hàng rào ngang (sau khi sắp xếp: 0,3,11,15) là: 3,8,4.

Cần dỡ bỏ tổng cộng 44 đơn vị hàng rào để nối thông toàn bộ 6×3=18 ô.

Ghi chú

Bài toán tương đương với tìm cây khung nhỏ nhất (MST) trên đồ thị lưới (N+1)×(M+1) đỉnh, trong đó trọng số cạnh giữa hai ô liền kề là kích thước của ô theo chiều vuông góc với hàng rào ngăn cách chúng.

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