trang chủ / đề bài / dhbb23_cbg_10_b

Cắt hình

Đề bài

Mô tả

Một mảnh giấy hình chữ nhật được cắt bởi những nhát kéo. Cho biết tọa độ của mảnh giấy cũng như các nhát cắt, hãy xác định số mảnh được cắt rời.

Giả thiết mảnh giấy được đặt trong một hệ tọa độ sao cho các mép giấy song song với các trục tọa độ, góc dưới trái của nó trùng với điểm (0;0) và góc trên phải của nó trùng với điểm (m;n).

Mỗi nhát cắt được xác định bởi hai đầu mút trên biên của mảnh giấy sao cho đảm bảo đoạn thẳng nối hai đầu mút này thực sự cắt mảnh giấy, tức là hai đầu mút không cùng nằm trên một cạnh của hình chữ nhật (nhát cắt không chạy dọc theo mép giấy). Mỗi nhát cắt là một đường thẳng cắt ngang toàn bộ mảnh giấy giữa hai đầu mút của nó và chia đôi mọi mảnh mà nó đi qua; các mảnh không bị dịch chuyển giữa các nhát cắt.

Nhiều nhát cắt có thể cùng đi qua một điểm, có thể chung đầu mút, và hai nhát cắt có thể trùng nhau (cùng một đoạn thẳng, kể cả khi hai đầu mút được ghi theo thứ tự ngược lại); nhát cắt trùng với một nhát cắt trước đó không tạo thêm mảnh nào.

Dữ liệu vào

  • Dòng đầu ghi hai giá trị m và n.
  • Dòng tiếp theo ghi số nhát cắt c.
  • c dòng tiếp theo, mỗi dòng ghi tọa độ của một nhát cắt gồm 4 số: 2 số đầu là hoành độ và tung độ của một đầu mút và 2 số sau là hoành độ và tung độ của đầu mút còn lại.

Các tọa độ trong dữ liệu đều là những số nguyên và được ghi cách nhau ít nhất một dấu cách nếu trên cùng một dòng.

Dữ liệu ra

In ra số mảnh bị cắt rời.

Ràng buộc

  • 1≤m,n,c≤1000.
  • Mọi đầu mút (x;y) là điểm nguyên nằm trên biên của mảnh giấy: 0≤x≤m, 0≤y≤n và x∈{0,m} hoặc y∈{0,n}.
  • Hai đầu mút của mỗi nhát cắt không cùng nằm trên một cạnh của hình chữ nhật.

Ví dụ

Input Output Giải thích
10 10
6
3 10 0 9
8 0 3 10
0 0 10 2
0 8 10 6
9 10 4 0
10 6 0 1
13 Mảnh giấy 10×10 bị cắt bởi 6 nhát kéo thành 13 mảnh. Có 5 giao điểm bên trong mảnh giấy; tại điểm (6;4) có ba nhát cắt thứ 2, 5, 6 cùng đi qua. Nhát cắt thứ 4 và thứ 6 chung đầu mút (10;6) trên mép giấy, điểm này không tạo thêm mảnh.
4 4
4
0 0 4 4
4 4 0 0
0 4 4 0
2 0 2 4
6 Nhát cắt thứ 2 trùng nhát cắt thứ 1 nên không tạo thêm mảnh. Ba nhát cắt còn lại (hai đường chéo và đường x=2) cùng đi qua tâm (2;2) và chia mảnh giấy thành 6 mảnh.

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