TopCoder SRM 349 Div1 Easy RadarFinder

問題

二つの基地が座標平面上にあり、それぞれの座標は(x1,y1),(x2,y2)である。
それぞれから、敵部隊の位置の距離を測定した結果r1,r2であった。


敵部隊の位置の候補は何箇所あるか、求めよ。
無限に多く候補がある場合、-1を返せ。

制約条件

-1000000000≦x1,y1,x2,y2≦1000000000
1≦r1,r2≦1000000000

方針

二円の距離と半径から、交点の数を求める。
二円が一致する場合は交点は無限にあり、
接する場合(外側同士で接する場合と、内側に入って接する場合がある)は1つ、
交わる場合は2つ。


doubleでやったら誤差死した。(EPSを1e-9にすると通らず1e-12にすると通るとか)
ので、long longのままで距離は二乗したまま扱うのがよさそう。

ソースコード

class RadarFinder {
	public:
	int possibleLocations(int x1, int y1, int r1, int x2, int y2, int r2) 
	{
		x2-=x1; y2-=y1;
		double d=sqrt(1.0*x2*x2+1.0*y2*y2);
		if(d==0&&r1==r2)return -1;
		if(abs(r1+r2-d)<EPS||abs(abs(r1-r2)-d)<EPS)return 1;
		if(d>r1+r2||d<abs(r1-r2))return 0;
		return 2;
	}
};