Cắt Cỏ Nghịch Ngợm

Đề bài

Mô tả

Có N bông hoa trên lưới [0,T]×[0,T], bông hoa thứ i nằm ở tọa độ (xi,yi). Không có hai bông hoa nào trùng tọa độ x, cũng không có hai bông hoa nào trùng tọa độ y.

Bessie đi từ (0,0) đến (T,T), mỗi bước chỉ sang phải hoặc lên trên, và hái mọi bông hoa nằm trên đường đi. Vì vậy tập hoa hái được phải tăng ngặt theo cả hai tọa độ. Trước hết Bessie muốn hái được nhiều hoa nhất có thể.

Trong tất cả các tập hoa có kích thước lớn nhất, hãy tìm tập làm diện tích cỏ bị cắt nhỏ nhất. Nếu tập hoa được chọn, sắp xếp theo thứ tự đi qua, là (x1,y1),…,(xk,yk) thì diện tích cỏ bị cắt bằng tổng diện tích các hình chữ nhật giữa hai điểm liên tiếp:

∑i=0k(xi+1−xi)(yi+1−yi)

với quy ước (x0,y0)=(0,0) và (xk+1,yk+1)=(T,T).

Dữ liệu vào

  • Dòng đầu: hai số nguyên N và T.
  • N dòng tiếp theo, dòng thứ i chứa hai số nguyên xi và yi.

Dữ liệu ra

  • Một số nguyên duy nhất: diện tích cỏ bị cắt nhỏ nhất.

Ràng buộc

  • 1≤N≤2×105, 1≤T≤106
  • 1≤xi,yi≤T−1
  • Các giá trị xi đôi một khác nhau, các giá trị yi đôi một khác nhau

Ví dụ

Input Output Giải thích
5 20
19 1
2 6
9 15
10 3
13 11
117 Không thể hái quá 2 bông hoa. Trong các tập 2 bông, tập tốt nhất là {(10,3),(13,11)} với diện tích 10×3+3×8+7×9=30+24+63=117. Tập {(2,6),(9,15)} chỉ cho 12+63+55=130.
2 10
3 4
7 8
34 Hái được cả hai bông hoa. Diện tích là 3×4+4×4+3×2=12+16+6=34.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0