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