BOJ
[BOJ 32686 // C++] DPS
measurezero
2024. 11. 22. 10:00
※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 32686번 문제인 DPS이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/32686
각 스킬에 대하여, \([L,R]\)에 포함된 스킬 시전 시간을 구해 그 시간과 단위시간당 damage를 곱해 문제를 해결하자.
\([L,R]\)에 포함된 스킬 시전 시간은 \([0,R]\)에 포함된 스킬 시전 시간에서 \([0,L]\)에 포함된 스킬 시전 시간을 빼는 것으로 편하게 계산할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long long ll;
typedef long double ld;
ll N, S, E;
ld ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> S >> E;
while (N--) {
ll x, y, t, z; cin >> x >> y >> z;
ans += (E / (x + y)) * z;
t = max(0LL, E % (x + y) - x);
ans += (ld)t / y * z;
ans -= (S / (x + y)) * z;
t = max(0LL, S % (x + y) - x);
ans -= (ld)t / y * z;
}
cout << fixed;
cout.precision(12);
cout << ans / (E - S);
}
728x90