문제
해결 과정
처음에 문제를 보고 바로 를 제출했다가 틀려버렸다. 그래서 문제를 다시 읽어보니, 총알의 속력이 빛의 속도에 근접할 수 있다는 것을 알게 되었다. 이러면 상대성 이론을 사용하여 문제를 풀어야 한다. 인터넷에 검색해 보면 빛의 속도가 m/s 임을 알 수 있다. 따라서 상대성 이론에 따르면, 과녁의 관성계에서 총알의 속력은 다음과 같다.
여기서 는 철수의 속력, 는 철수의 관성계에서 총알의 속력, 는 빛의 속도다. 이를 코드로 구현하면 다음과 같다.
예시 답안
실제 정답과 출력값의 오차를 까지 허용하므로 소수점 아래 10자리까지 출력하면 된다.
C++ 코드
#include <iomanip>
#include <iostream>
using namespace std;
void solve(void) {
double A, B; cin >> A >> B;
double c = 299792458.0;
cout << fixed << setprecision(10) << (A + B) / (1 + A * B / c / c);
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}효율성 분석
| 시간 복잡도 | 공간 복잡도 |
|---|---|
문제 풀이 팁
int로 나눗셈을 하면 몫만 출력된다.double로 나눗셈을 하면 실수가 출력된다.
<iomanip>의std::fixed와std::setprecision을 사용하면 출력 자릿수를 조절할 수 있다.
std::fixed는 고정 소수점 표기법을 사용하고,std::setprecision은 소수점 아래 자릿수를 설정한다.