C++ bài 8.D3: Chia cắt hình chữ nhật
Có một hình chữ nhật trên mặt phẳng tọa độ với bốn đỉnh có tọa độ là \((0,0)\), \((W,0)\), \((W,H)\), và \((0,H)\). Bạn được cho một điểm \((x,y)\) nằm trong hình chữ nhật hoặc trên biên của nó. Chúng ta sẽ vẽ một đường thẳng đi qua điểm \((x,y)\) để chia hình chữ nhật thành hai phần. Tìm diện tích lớn nhất có thể của phần có diện tích không lớn hơn phần kia. Ngoài ra, xác định xem có nhiều cách chia hình chữ nhật để đạt được diện tích lớn nhất đó hay không.
Ràng buộc:
- \(1 \leq W, H \leq 10^9\)
- \(0 \leq x \leq W\)
- \(0 \leq y \leq H\)
- Tất cả giá trị nhập vào là số nguyên.
ĐỊNH DẠNG ĐẦU VÀO
Đầu vào được cung cấp từ đầu vào chuẩn như sau:
W H x y
ĐỊNH DẠNG ĐẦU RA
In ra diện tích lớn nhất có thể của phần có diện tích không lớn hơn phần kia, theo sau là \(1\) nếu có nhiều cách chia hình chữ nhật để đạt được diện tích lớn nhất đó, và \(0\) nếu không.
Diện tích in ra sẽ được coi là chính xác khi sai số tuyệt đối hoặc tương đối không quá \(10^{-9}\).
Ví dụ:
Input
2 3 1 2
Output
3.000000 0
Đường thẳng \(x=1\) tạo ra lát cắt tối ưu, và không có đường thẳng nào khác làm được điều này.
Input
2 2 1 1
Output
2.000000 1
Giải thích ví dụ mẫu:
Ví dụ 1: Với hình chữ nhật 2x3 và điểm (1, 2), đường thẳng tối ưu là x=1 hoặc y=2. Diện tích lớn nhất có thể là 3, và chỉ có 1 cách chia hình chữ nhật để đạt được diện tích này.
Ví dụ 2: Với hình chữ nhật 2x2 và điểm (1, 1), đường chéo từ (1, 1) chia hình chữ nhật thành hai phần có diện tích 2, và có 1 cách chia để đạt được diện tích này.
Lời giải bài tập này: Tại đây
Group giải đáp thắc mắc: Lập trình 24h
Fanpage CLB: CLB lập trình Full House- Việt Nam
Youtube: CLB Lập Trình Full House
Comments