정보가 부족해 수학적으로는 해를 구할 수 없는 문제이지만 이분탐색이라는 폭력적인 방법으로 해를 구해버린다
비례식으로 식을 구한 후 w(두 빌딩사이의 거리)를 이분탐색으로 찾는다
핵심은 빌딩이 멀어질수록(w가 커질수록) C는 작아지고
빌딩이 가까워질수록(w가 작아질수록) C는 커진다
double x, y, c;
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> x >> y >> c;
double high = min(x, y);
double low = 0.0f;
double ans = 0;
while (low+0.001f <= high)
{
double w = (low + high) / 2;
double h1 = sqrt(x * x - w * w);
double h2 = sqrt(y * y - w * w);
double tmp = (h1 * h2) / (h1 + h2);
if (tmp >= c)
{
ans = w;
low = w;
}
else
{
high = w;
}
}
cout << ans << endl;
}
W를 이분탐색으로 탐색하여 h1 h2를 구한 후 식에 대입하여 C와 비교한다.
계산한 값 tmp가 C보다 크다는 것은 구해진 건물의 거리가 너무 가깝다는 뜻이므로 올려주고
반대이면 내려준다
'백준' 카테고리의 다른 글
백준 2987번 사과나무 (c++) (0) | 2025.02.19 |
---|---|
백준 16958번 텔레포트 (c++) (0) | 2025.02.18 |
백준 10216번 Count Circle Groups (c++) (0) | 2025.02.08 |
백준 21943번 연산 최대로 (c++) (0) | 2025.02.03 |
백준 1443번 망가진 계산기 (c++) (0) | 2025.02.01 |