FOJ Common Tangents
2016-04-10 09:48
218 查看
Problem Description
Two different circles can have at most four common tangents.
The picture below is an illustration of two circles with four common tangents.
Now given the center and radius of two circles, your job is to find how many common tangents between them.
Input
The first line contains an integer T, meaning the number of the cases (1 <= T <= 50.).
For each test case, there is one line contains six integers x1 (−100 ≤ x1 ≤ 100), y1 (−100 ≤ y1 ≤ 100), r1 (0 < r1 ≤ 200), x2 (−100 ≤ x2 ≤ 100), y2 (−100 ≤ y2 ≤ 100), r2 (0 < r2 ≤ 200). Here (x1, y1) and (x2, y2) are the coordinates of the center of the first
circle and second circle respectively, r1 is the radius of the first circle and r2 is the radius of the second circle.
Output
For each test case, output the corresponding answer in one line.
If there is infinite number of tangents between the two circles then output -1.
Sample Input
3
10 10 5 20 20 5
10 10 10 20 20 10
10 10 5 20 10 5 Sample Output
4
2
3
这一题由于是精度原因,建议用距离平方来表示,另外,是内切时,判断一下两圆是重合的情况,输出-1
AC代码:
Two different circles can have at most four common tangents.
The picture below is an illustration of two circles with four common tangents.
Now given the center and radius of two circles, your job is to find how many common tangents between them.
Input
The first line contains an integer T, meaning the number of the cases (1 <= T <= 50.).
For each test case, there is one line contains six integers x1 (−100 ≤ x1 ≤ 100), y1 (−100 ≤ y1 ≤ 100), r1 (0 < r1 ≤ 200), x2 (−100 ≤ x2 ≤ 100), y2 (−100 ≤ y2 ≤ 100), r2 (0 < r2 ≤ 200). Here (x1, y1) and (x2, y2) are the coordinates of the center of the first
circle and second circle respectively, r1 is the radius of the first circle and r2 is the radius of the second circle.
Output
For each test case, output the corresponding answer in one line.
If there is infinite number of tangents between the two circles then output -1.
Sample Input
3
10 10 5 20 20 5
10 10 10 20 20 10
10 10 5 20 10 5 Sample Output
4
2
3
这一题由于是精度原因,建议用距离平方来表示,另外,是内切时,判断一下两圆是重合的情况,输出-1
AC代码:
# include <cstdio> using namespace std; int dis(int , int , int , int); int main(){ int t, x1, x2, y1, y2, r1, r2, i, j, k, distance; scanf("%d", &t); for(i=1; i<=t; i++){ scanf("%d%d%d%d%d%d", &x1, &y1, &r1, &x2, &y2, &r2); distance=dis(x1, y1, x2, y2); if(distance>(r1+r2)*(r1+r2)){ printf("%d\n", 4); continue; } if(distance==(r1+r2)*(r1+r2)){ printf("%d\n", 3); continue; } if(distance>(r1-r2)*(r1-r2)&&distance<(r1+r2)*(r1+r2)){ printf("%d\n", 2); continue; } if(distance==(r1-r2)*(r1-r2)){ if(distance==0){ printf("%d\n", -1); continue; } printf("%d\n", 1); continue; } printf("%d\n", 0); } return 0; } int dis(int x1, int y1, int x2, int y2){ return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); }
相关文章推荐
- test
- php_D3_“简易聊天室 ”实现的关键技术 详解
- 名称和名称管理器
- MySQL 服务无法启动。 服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助。
- datagrid动态加载列
- json转html样式
- REST APIs must be hypertext-driven——Posted by Roy T. Fielding
- Linux内核分析第七周———可执行程序的装载
- java中的常量
- 02.Java 集合 - ArrayList
- LVS原理详解
- 体检套餐
- hihoCoder 九十二周 数论一·Miller-Rabin质数测试 (数论 筛素数)
- WPF 绑定中的TargetNullValue
- 实验七:Linux内核如何装载和启动一个可执行程序
- 技术人员如何创业《四》- 打造超强执行力团队(转载)
- ACM总结——最长公共子序列 & 最长不减(不增)子序列
- hdu 5661
- 技术人员如何创业《三》- 合伙人的分工(转载)
- 技术人员如何创业《二》- 合伙人的模式(转载)