Cắt hình

View as PDF

Submit solution

Points: 250.00 (partial)
Time limit: 3.0s
Memory limit: 1024M
Input: stdin
Output: stdout

Author:
Problem type
Allowed languages
C, C++, GAS64, Pascal, Perl, PHP, Python, Sed, TCL, Text

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 toạ độ 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ệ toạ độ sao cho các mép giấy song song với các trục toạ độ, 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.

Dữ liệu vào cho gồm:
  • 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 toạ độ 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ạ. Các toạ độ trong file dữ liệu đều là những số nguyên và được ghi cách nhau ít nhất một dấu trắng nếu trên cùng một dòng. Giới hạn số nhát cắt không quá 300.
Kết quả:

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

Ví dụ:
Input
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
Output
13

Để giải bài toán này không có gì khó khăn nếu như bạn đã biết tìm giao điểm của các đoạn thẳng. Ở đây ta cần phân biệt giao điểm nằm trên biên của lưới hay giao điểm không nằm trên biên của lưới.


Comments

Please read the guidelines before commenting.


There are no comments at the moment.