B - Common Tangents
题目大意:求两个圆之间有多少条切线
有六种情况,直接一一列举就行
第一种:两个圆重合——无限个切线
第二种:两个圆相离——四个
第三种:两元相切(外切) 三个
第四种:两元相交——两个
第五中: 两元相交(内切)——一个
第六种:内含——0个
#include <cstdio>
#include <cstring>
#include<set>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
int repeat;
double x1,y1,r1,x2,y2,r2;
while(scanf("%d",&repeat)!=EOF)
{
while(repeat--){
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&r2);
double p1 = x2-x1, p2 = y2 -y1 ;
double length1 = sqrt(p1*p1+p2*p2);
if(x1==x2&&y2==y1&&r1==r2)
{
printf("-1\n");
continue;
}
if(length1 == abs(r2-r1)){
printf("1\n");
continue;
}
//s double length2 = sqrt(x2*x2+y2*y2);
if(length1>r1+r2)
printf("4\n");
else
if(length1 == r1+r2)
printf("3\n");
else{
if(length1>r1&&length1>r2)
printf("2\n");
else
printf("0\n");
}
}
}
return 0;
}