Hatena::Grouptopcoder

hama_DU@TopCoderへの道

2012-04-04SRM349 (Practice)

SRM 349 RadarFinder

|  SRM 349 RadarFinder - hama_DU@TopCoderへの道 を含むブックマーク はてなブックマーク -  SRM 349 RadarFinder - hama_DU@TopCoderへの道

http://www.topcoder.com/stat?c=problem_statement&pm=7766

  • 場合分け。
    • 一方の円が他方の円を完全に含む場合などに注意する
    • オーバーフローにも注意する
      • あらかじめ引数をlongに再代入しておく
public class RadarFinder {
	public int possibleLocations(int ix1, int iy1, int ir1, int ix2, int iy2, int ir2) {
		long x1 = ix1, x2 = ix2;
		long y1 = iy1, y2 = iy2;
		long r1 = ir1, r2 = ir2;
		
		if (x1 == x2 && y1 == y2) {
			if (r1 == r2) {
				return -1;
			}
			return 0;
		}
		
		long dx = Math.abs(x2 - x1);
		long dy = Math.abs(y2 - y1);
		long dist2 = dx * dx + dy * dy;
		long rr2 = (r1 + r2) * (r1 + r2);
		if (dist2 < rr2) {
			long rr1 = (r1 - r2) * (r1 - r2);
			if (dist2 < rr1) {
				return 0;
			} else if (dist2 == rr1) {
				return 1;
			}
			return 2;
		} else if (dist2 == rr2) {
			return 1;
		}
		return 0;
	}
}