样例1
输入 :
3 3 2 2 3 1 4 3 1
输出:
YES
样例2
输入 :
2 2 3 3 2 2 4 2 1
输出:
NO
#include<bits/stdc++.h>
using namespace std;
struct circular{
int a;
int b;
int r;
};
/*
(1)d>R+r 两圆外离; 两圆的圆心距离之和大于两圆的半径之和。
(2)d=R+r 两圆外切; 两圆的圆心距离之和等于两圆的半径之和。
(3)d=R-r 两圆内切; 两圆的圆心距离之和等于两圆的半径之差。
(4)d<R-r 两圆内含;两圆的圆心距离之和小于两圆的半径之差。
(5)d<R+r 两园相交;两圆的圆心距离之和小于两圆的半径之和。
*/
int isTangency(circular A,circular B){
if(A.a==B.a&&A.b==B.b){
return 0;
}
else{
int distant2 = (A.a-B.a)*(A.a-B.a)+(A.b-B.b)*(A.b-B.b);
int r_sum = A.r + B.r;
int r_diff = abs(A.r - B.r);
if(distant2 == r_sum*r_sum){
return 1;
}
else if(distant2 == r_diff*r_diff ){
return 2;
}
else{
return 0;
}
}
}
int main( )
{
int x,y,z;
vector<circular> V;
for(int i = 0 ;i < 3; i++){
cin>>x>>y>>z;
circular tmp;
tmp.a = x;
tmp.b = y;
tmp.r = z;
V.push_back(tmp);
}
bool flag = false;
int res[3];
res[0]=isTangency(V[0],V[1]);
res[1]=isTangency(V[0],V[2]);
res[2]=isTangency(V[1],V[2]);
if(accumulate(res,res+3,0)==5)flag = true; //题目所要求的情形分数一定为5
cout<<(flag?"YES":"NO")<<endl;
return 0;
}