BOJ 1002 - 터렛
이 문제 재채점되고 $4$년전 풀이가 틀려있어서 당황스러웠다.
아마 실수오차때문이거나 $r_1=0, r_2=0$ 이고 위치가 같을 때 $-1$ 을 출력하는게 아닌 점이기 때문에 $1$ 을 출력해야 하는 엣지 케이스가 제대로 처리가 안된 것 같다.
실수 연산을 안쓰고 항상 정수 연산으로 대체할 수 있다.
int sq(int x) { return x * x; }
void solve() {
int x1, y1, r1, x2, y2, r2;
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
if (r1 > r2) swap(r1, r2), swap(x1, x2), swap(y1, y2);
int dx = x1 - x2, dy = y1 - y2;
int d = dx * dx + dy * dy;
if (x1 == x2 && y1 == y2) {
if (r1 == r2) {
if (r1 == 0) cout << 1 << endl;
else cout << -1 << endl;
} else cout << 0 << endl;
return;
}
if (r1 == 0 && r2 == 0) {
cout << 0 << endl;
return;
}
if (d > sq(r1 + r2)) {
cout << 0 << endl;
return;
}
if (d == sq(r1 + r2)) {
cout << 1 << endl;
return;
}
if (d == sq(r2 - r1)) {
cout << 1 << endl;
return;
}
if (d < sq(r2 - r1)) {
cout << 0 << endl;
return;
}
cout << 2 << endl;
}
Comments