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

Thu gom đồ vật

Đề bài

Mô tả

Một chiếc túi được đặt tại điểm (xs,ys) trên mặt phẳng toạ độ, và có n đồ vật nằm rải rác xung quanh. Ban đầu bạn đứng ngay tại vị trí chiếc túi.

Bạn không thể di chuyển chiếc túi, và mỗi lần chỉ mang được tối đa 2 đồ vật. Ngoài ra, một khi đã nhặt một đồ vật lên thì bạn bắt buộc phải mang nó về túi, không được đặt nó xuống ở bất kỳ chỗ nào khác. Vì vậy mỗi lượt đi có đúng một trong hai dạng: từ túi tới một đồ vật rồi quay về túi, hoặc từ túi tới một đồ vật, sang một đồ vật khác, rồi quay về túi.

Thời gian di chuyển giữa hai điểm bằng bình phương độ dài đoạn thẳng nối hai điểm đó. Hãy tìm cách thu gom toàn bộ n đồ vật vào túi sao cho tổng thời gian là nhỏ nhất.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên xs, ys là toạ độ chiếc túi.
  • Dòng thứ hai chứa số nguyên n là số đồ vật.
  • n dòng tiếp theo, dòng thứ i chứa hai số nguyên là toạ độ của đồ vật thứ i.

Dữ liệu ra

  • Dòng đầu in ra tổng thời gian nhỏ nhất.
  • Dòng thứ hai in ra một hành trình tối ưu: dãy các số trong đó 0 là chiếc túi và 1..n là chỉ số đồ vật. Hành trình phải bắt đầu và kết thúc tại 0, mỗi đồ vật xuất hiện đúng một lần, và giữa hai số 0 liên tiếp có 1 hoặc 2 đồ vật.

Nếu có nhiều hành trình tối ưu, in ra hành trình nào cũng được.

Ràng buộc

  • 1n24
  • Mọi toạ độ là số nguyên và không vượt quá 100 về giá trị tuyệt đối.
  • Tất cả các vị trí đã cho (kể cả chiếc túi) đôi một khác nhau.

Ví dụ

Input Output Giải thích
0 0
2
1 1
-1 1
8
0 1 2 0
Mang cả hai đồ vật trong cùng một lượt: 01 mất 2, 12 mất 4, 20 mất 2, tổng cộng 8. Nếu đi riêng từng vật thì mất 2·2+2·2=8 cũng bằng 8, nên cả hai cách đều được chấp nhận.
1 1
3
4 3
3 4
0 0
32
0 3 0 1 2 0
Lượt đầu chỉ mang đồ vật 3 hết 2+2=4. Lượt sau mang đồ vật 1 rồi 2 hết 13+2+13=28. Tổng cộng 32.
-3 4
1
2 2
58
0 1 0
Chỉ có một đồ vật nên phải đi và về: 2·(52+22)=58.

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