trang chủ / đề bài / icpc23_reg_a

Truy vấn diện tích

Đề bài

Mô tả

Cho một đa giác lồi n đỉnh trên mặt phẳng tọa độ. Các đỉnh được đánh số từ 1 đến n theo chiều kim đồng hồ; đỉnh thứ i có tọa độ (xi,yi).

Ban đầu đa giác chưa có đường chéo nào.

Bạn cần xử lý q truy vấn thuộc ba loại sau:

  • A i j: vẽ thêm một đường chéo nối đỉnh i với đỉnh j. Dữ liệu đảm bảo đỉnh i không kề đỉnh j, đường chéo nối hai đỉnh này chưa tồn tại ngay trước truy vấn, và nó không cắt bất kỳ đường chéo nào đang có, ngoại trừ tại các đầu mút.
  • R i j: xóa đường chéo nối đỉnh i với đỉnh j. Dữ liệu đảm bảo đường chéo này tồn tại ngay trước truy vấn.
  • ? i j: các đường chéo đang có chia đa giác thành các mảnh nhỏ hơn. Hãy giải bài toán con sau: chọn bỏ đi một số mảnh (có thể không bỏ mảnh nào) sao cho:
    • Mảnh chứa cả đỉnh thứ i và đỉnh thứ (imodn+1) không bị bỏ.
    • Mảnh chứa cả đỉnh thứ j và đỉnh thứ (jmodn+1) không bị bỏ.
    • Hai mảnh nói trên vẫn liên thông với nhau.
    • Tổng diện tích các mảnh bị bỏ là lớn nhất có thể.

Hai mảnh A và B được coi là liên thông khi và chỉ khi cả hai đều không bị bỏ và thỏa mãn một trong hai điều kiện sau:

  • A và B có chung một cạnh.
  • Tồn tại một mảnh C không bị bỏ sao cho C liên thông với cả A và B.

Lưu ý rằng trong các truy vấn loại thứ ba, không có mảnh nào thực sự bị bỏ đi. Bạn chỉ giải bài toán con và in ra tổng diện tích lớn nhất có thể của các mảnh bị bỏ. Các đỉnh và các cạnh của đa giác luôn giữ nguyên.

Dữ liệu vào

Dữ liệu vào gồm nhiều bộ dữ liệu. Mỗi bộ có dạng:

  • Dòng đầu tiên chứa số nguyên n (3≤n≤2·105), số đỉnh của đa giác.
  • n dòng tiếp theo, dòng thứ i chứa hai số nguyên xi và yi (0≤|xi|,|yi|≤109), tọa độ đỉnh thứ i.
  • Dòng tiếp theo chứa số nguyên q (1≤q≤2·105), số truy vấn.
  • q dòng tiếp theo, mỗi dòng chứa một truy vấn theo một trong các dạng trên.

Dữ liệu vào kết thúc bằng một dòng chứa số 0, dòng này không phải là một bộ dữ liệu.

Dữ liệu đảm bảo:

  • Tổng n trên mọi bộ dữ liệu không vượt quá 2·105.
  • Tổng q trên mọi bộ dữ liệu không vượt quá 2·105.

Dữ liệu ra

Với mỗi truy vấn loại thứ ba, in ra một số thực trên một dòng: tổng diện tích lớn nhất có thể của các mảnh bị bỏ.

Đáp án được coi là đúng nếu sai số tương đối hoặc tuyệt đối không vượt quá 10−6. Cụ thể, gọi C là đáp án của bạn và J là đáp án của ban giám khảo, đáp án được chấp nhận nếu |C−J|max(1,|J|)≤10−6.

Ràng buộc

  • 3≤n≤2·105, 1≤q≤2·105, 0≤|xi|,|yi|≤109; đa giác lồi, các đỉnh theo chiều kim đồng hồ.
  • Tổng n và tổng q trên mọi bộ dữ liệu đều không vượt quá 2·105.

Ví dụ

Input Output Giải thích
7
1 1
1 7
2 8
4 7
7 4
8 2
7 1
15
A 1 3
A 1 4
A 1 5
A 1 6
? 1 3
R 1 3
A 2 4
R 1 6
A 5 7
? 2 5
R 1 5
R 1 4
A 4 7
A 2 7
? 7 4
0
24.0
0.0
3.0
Truy vấn 5: các đường chéo 1−3, 1−4, 1−5, 1−6 chia đa giác thành 5 tam giác; giữ tam giác (1,2,3) và tam giác (1,3,4), bỏ ba tam giác còn lại. Truy vấn 10: các đường chéo 1−4, 1−5, 2−4, 5−7 tạo thành một dãy mảnh từ cạnh 2−3 tới cạnh 5−6 qua mọi mảnh, không bỏ được mảnh nào. Truy vấn 15: đang có các đường chéo 2−4, 5−7, 4−7, 2−7; giữ các mảnh trên đường từ cạnh 7−1 tới cạnh 4−5, bỏ tam giác (2,3,4) và (5,6,7).
4
0 0
0 2
2 2
2 0
8
A 1 3
? 1 2
? 1 3
? 4 4
R 3 1
A 2 4
? 1 4
? 2 3
0
2.0
0.0
2.0
2.0
2.0
Hình vuông cạnh 2. Với đường chéo 1−3, cạnh 1−2 và 2−3 thuộc cùng một tam giác nên bỏ được tam giác còn lại; cạnh 1−2 và 3−4 ở hai tam giác khác nhau nên phải giữ cả hai.

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