trang chủ / đề bài / voi26_camp

Cắm trại

Đề bài

Mô tả

Vào năm mới, K gia đình tổ chức cắm trại trên một khu đất có dạng hình tròn. Khu đất được biểu diễn trên hệ trục tọa độ Đề-các Oxy (đơn vị mét), có tâm ở gốc tọa độ O(0,0) và bán kính R=100 mét. Trên biên hình tròn, chọn K điểm phân biệt để làm vị trí cắm trại cho K gia đình. Các điểm được đánh số từ 1 đến K và được xác định bằng dãy góc α1,α2,…,αK (0∘≤α1<α2<…<αK≤359∘), αi là góc từ tia Ox ngược chiều kim đồng hồ tới tia nối O đến điểm thứ i. Cụ thể, điểm thứ i (1≤i≤K) có tọa độ là (R×cosαi×π180∘,R×sinαi×π180∘), trong bài toán này lấy π=3.14159265359.

Alice nhận nhiệm vụ thiết kế đường dây để cấp điện cho tất cả các trại. Cụ thể, máy phát điện đặt ở trại 1, cần kết nối trại 1 tới K−1 trại còn lại bằng dây điện. Trong quá trình thiết kế, được phép thêm tối đa 25 điểm trung gian để đấu nối nhưng các điểm này phải nằm trong hoặc trên biên của mảnh đất hình tròn. Các dây điện có thể đấu nối giữa hai trại, giữa một trại với một điểm trung gian, giữa hai điểm trung gian. Độ dài dây điện nối trực tiếp giữa hai điểm có tọa độ (x1,y1) và (x2,y2) là (x1−x2)2+(y1−y2)2. Cần thiết kế sao cho với một trại bất kỳ, tồn tại duy nhất một đường dẫn điện trực tiếp hoặc gián tiếp từ trại 1 tới trại đó. Giả sử phần dây hao hụt trong quá trình đấu nối là không đáng kể.

Alice đã thiết kế được một phương án có tổng độ dài dây điện sử dụng là A mét. Cô đã mua đúng A mét dây điện. Tuy nhiên chưa kịp triển khai thì bản vẽ bị mất. Alice nhờ Bob thiết kế lại một phương án, nếu phương án của Bob có tổng độ dài dây điện cần dùng lớn hơn A thì họ phải mua thêm cho đủ, ngược lại thì không cần mua thêm.

Yêu cầu: Hãy giúp Bob tìm cách thiết kế sao cho tổng độ dài dây điện cần mua thêm là càng nhỏ càng tốt.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên dương K (3≤K≤10).
  • Dòng thứ hai chứa K số nguyên không âm α1,α2,…,αK.
  • Dòng cuối cùng ghi số thực A (0<A<2×π×R).

Các số trên cùng một dòng cách nhau bởi dấu cách.

Dữ liệu ra

  • Dòng đầu ghi một số tự nhiên M là số lượng điểm trung gian (0≤M≤25).
  • Nếu M>0 thì M điểm này được đánh số thứ tự từ K+1 đến K+M, và ghi ra M dòng tiếp theo, dòng thứ i chứa hai số thực là tọa độ của điểm thứ K+i. Các giá trị tọa độ được ghi ra với độ chính xác đến bốn chữ số sau dấu chấm thập phân.
  • Mỗi dòng trong số K+M−1 dòng tiếp theo ghi hai số nguyên dương u và v, mô tả một dây điện nối giữa điểm thứ u và điểm thứ v (1≤u,v≤K+M).

Lưu ý: checker không chấp nhận in ra số thập phân dạng -0.0000.

Cách tính điểm: với mỗi test, gọi B là tổng độ dài dây điện trong phương án thiết kế của Bob. Số điểm (trên thang điểm 1) cho phương án này là:

{1,nếu B≤A,0,nếu B>1.03×A,13−12BA,nếu A<B≤1.03×A.

Ràng buộc

  • 3≤K≤10.
  • 0≤α1<α2<…<αK≤359, các αi là số nguyên.
  • 0<A<2×π×R.
  • 0≤M≤25; các điểm trung gian nằm trong hoặc trên biên hình tròn tâm O bán kính R=100.

Subtasks

  • Subtask 1 (12% số điểm): K=3, α=(0,90,180), A=273.2056.
  • Subtask 2 (14% số điểm): K=3, α=(0,40,150), A=230.5843.
  • Subtask 3 (14% số điểm): K=4, α=(40,140,200,340), A=341.1483.
  • Subtask 4 (14% số điểm): K=5, α=(0,72,144,216,288), A=457.4330.
  • Subtask 5 (6% số điểm): K=6, α=(0,60,120,180,240,300), A=500.0000.
  • Subtask 6 (40% số điểm): Không có ràng buộc nào thêm.

Ví dụ

Input Output Giải thích
3
0 120 240
300.0000
1
0.0000 0.0000
1 4
2 4
3 4
Ba trại ở (100,0), (−50,86.6025) và (−50,−86.6025). Thêm một điểm trung gian có tọa độ (0,0). Điểm trung gian này nối với 3 trại với tổng độ dài là 300.0000 mét.
3
0 90 180
273.2056
1
0.0000 57.7350
4 2
4 3
4 1
Ví dụ bổ sung (không có trong đề gốc, chính là input của subtask 1). Ba trại ở (100,0), (0,100), (−100,0). Điểm trung gian (0;57.7350) nhìn mỗi cặp dây dưới góc 120∘; tổng độ dài dây là 2×115.4701+42.2650≈273.2051≤A. Có nhiều phương án đúng, in ra phương án bất kỳ.

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