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

Máy Phóng

Đề bài

Mô tả

Trên một con đường thẳng (trục số), có N máy phóng và M truy vấn vận chuyển. Mỗi máy phóng i có thể phóng hàng từ vị trí xi đến vị trí yi trong thời gian ti. Mỗi truy vấn j yêu cầu vận chuyển hàng từ vị trí aj đến vị trí bj.

Để vận chuyển hàng từ aj đến bj, có hai lựa chọn:

  • Không dùng máy phóng: mất |ajbj| đơn vị thời gian.
  • Dùng máy phóng i: đi bộ từ aj đến xi, phóng đến yi, rồi đi bộ đến bj; tổng thời gian là |ajxi|+ti+|yibj|.

Với mỗi truy vấn, hãy tìm thời gian vận chuyển nhỏ nhất (có thể dùng tối đa một máy phóng).

Dữ liệu vào

  • Dòng 1: hai số nguyên NM.
  • N dòng tiếp theo: mỗi dòng gồm ba số nguyên xi, yi, ti mô tả máy phóng i.
  • M dòng tiếp theo: mỗi dòng gồm hai số nguyên aj, bj mô tả truy vấn j.

Dữ liệu ra

In ra M dòng, dòng thứ j là thời gian vận chuyển nhỏ nhất cho truy vấn j.

Ràng buộc

  • 1N,M105
  • 0xi,yi,ti109
  • 0aj,bj109

Ví dụ

Input Output Giải thích
2 3
0 10 1
13 8 2
1 12
5 2
20 7
4
3
10
Truy vấn 1 (1→12): dùng máy 1 tốn |1-0|+1+|10-12|=4. Truy vấn 2 (5→2): đi thẳng |5-2|=3. Truy vấn 3 (20→7): dùng máy 2 tốn |20-13|+2+|8-7|=10.

Ghi chú

Bài toán yêu cầu xử lý nhanh M truy vấn với N máy phóng; thuật toán O(NM) sẽ không đủ nhanh.

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.400 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.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0