리듬게임
면접 대비시간 제한1초메모리 제한1024 MB
마디 수와 마디마다 바뀌는 BPM이 주어질 때, 한 마디가 4박이라는 점을 이용해 곡 전체 재생 시간을 초 단위로 구합니다.
문제
레이는 리듬게임을 개발 중이다. 리듬게임에는 다양한 곡이 있고, 레이는 곡 선택 화면에 곡의 총 플레이 시간을 미리 보여주는 기능을 추가하려고 한다. 곡의 구성을 알려면 다음 개념을 알아야 한다.
- 마디는 곡을 구성하는 가장 기본적인 길이 단위이다. 한 곡은 여러 개의 마디로 이루어져 있다.
- 박은 마디 안의 박자를 나타내는 단위이다. 이 리듬게임에 쓰이는 곡은 모두 박자이므로, 한 마디는 4개의 박으로 구성된다.
- BPM(Beats Per Minute)은 곡의 진행 속도를 나타내는 단위이며, 1분 동안 진행되는 박의 개수이다. 곡의 BPM이 이면 1분 동안 개의 박이 균일한 속도로 진행된다.
- BPM은 곡 중간에 바뀔 수 있으며, 이를 변속이라고 한다. 변속은 각 마디가 시작될 때 일어날 수 있다. 바뀐 BPM은 다음 변속이 오거나 곡이 끝날 때까지 유지된다.
곡의 총 마디 수, 초기 BPM, 변속 정보가 주어졌을 때 이 곡의 총 플레이 시간을 구하라.
입력
첫 번째 줄에 곡의 마디 수 , 초기 BPM , 변속 횟수 가 공백으로 구분되어 주어진다. (, )
다음 개의 줄 중 번째 줄에는 번째 변속이 일어나는 마디 와, 변속 후의 BPM 가 주어진다. (, )
는 모두 정수이다. 는 소수점 아래 최대 2자리까지 주어지는 양의 실수이다.
변속은 마디 순서대로 주어지며, 한 마디에서 변속이 두 번 이상 일어나지 않는다. 또한 첫 번째 마디에서는 변속이 일어나지 않는다. 즉, 이다.
출력
첫 번째 줄에 곡의 총 플레이 시간을 초 단위로 출력한다.
정답과의 상대 오차 또는 절대 오차가 이하이면 정답으로 처리한다.
정확한 채점을 위해 정답을 고정 소수점 형식으로 소수점 아래 12자리 이상 출력하는 것을 권장한다. 출력 방법은 힌트를 참고하라.
힌트
정답인 ans를 소수점 아래 12자리까지 출력하는 방법은 다음과 같다. 이외의 언어는 각 언어의 레퍼런스 페이지를 참고하라.
- C:
printf("%.12f\n", ans); - C++:
std::cout << std::fixed << std::setprecision(12) << ans << std::endl; - C#:
Console.WriteLine(String.Format("{0:F12}", ans)); - Java:
System.out.printf("%.12f\n", ans); - Python:
print(f'{ans:.12f}')