Tiếp tuyến từ điểm đến đường tròn
Xem dưới dạng PDF
Gửi bài giải
Điểm:
25
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
đầu vào:
stdin
Đầu ra:
stdout
Tác giả:
Kiểu bài tập
Trong một bài toán quang học, một tia sáng xuất phát từ một điểm nguồn chiếu đến một thấu kính hình tròn. Tuỳ vào vị trí của điểm nguồn, sẽ có không, một hoặc hai đường thẳng đi qua điểm nguồn và tiếp xúc với thấu kính.
Hãy viết chương trình xác định số lượng tiếp tuyến từ một điểm đến một đường tròn, và nếu có, hãy tìm toạ độ các tiếp điểm.
Định dạng đầu vào
- Dòng đầu chứa ba số nguyên \(x_c, y_c, r\) (\(-10^4 \le x_c, y_c \le 10^4\), \(1 \le r \le 10^4\)) là tâm và bán kính đường tròn.
- Dòng thứ hai chứa hai số nguyên \(x_p, y_p\) (\(-10^4 \le x_p, y_p \le 10^4\)) là toạ độ điểm nguồn.
Định dạng đầu ra
- Dòng đầu in số lượng tiếp tuyến \(k\) (\(0\), \(1\) hoặc \(2\)).
- Nếu \(k = 1\): dòng thứ hai in toạ độ \(x\) \(y\) của tiếp điểm.
- Nếu \(k = 2\): hai dòng tiếp theo, mỗi dòng in toạ độ \(x\) \(y\) của một tiếp điểm (theo thứ tự bất kỳ).
- Kết quả in ra số thực làm tròn đến sáu chữ số thập phân.
Ví dụ
Input:
0 0 1
3 0
Output:
2
0.333333 0.942809
0.333333 -0.942809
Ràng buộc
- 30% số điểm: \(|x_c|,|y_c|,|x_p|,|y_p|, r \le 10\).
- 30% số điểm tiếp theo: \(|x_c|,|y_c|,|x_p|,|y_p|, r \le 100\).
- 40% số điểm còn lại: không có ràng buộc gì thêm.
Nhận xét