https://www.acmicpc.net/problem/16434
코드
#include <iostream>
#include <vector>
using namespace std;
#define FASTIO ios::sync_with_stdio(false); cin.tie(NULL);
typedef long long ll;
typedef struct {
ll t;
ll a;
ll h;
} room;
vector<room> r;
ll n, h;
bool simul(ll m) {
ll ca = h;
ll ch = m;
ll tmp;
for (int i = 0; i < n; i++) {
if (r[i].t == 1) {
ll ma = r[i].a;
ll mh = r[i].h;
if (mh % ca == 0) tmp = mh / ca - 1;
else tmp = mh / ca;
ch -= ma * tmp;
if (ch <= 0) return false;
}
else {
ca += r[i].a;
ch = min(m, ch + r[i].h);
}
}
return true;
}
int main() {
FASTIO;
cin >> n >> h;
r = vector<room>(n);
for (int i = 0; i < n; i++)
cin >> r[i].t >> r[i].a >> r[i].h;
ll s = 1, e = 1e18, mid, ans = 0;
while (s <= e) {
mid = (s + e) / 2;
bool isSuccess = simul(mid);
if (isSuccess) {
ans = mid;
e = mid - 1;
}
else s = mid + 1;
}
cout << ans;
return 0;
}
설명
매번 전투 시뮬레이션을 통해서 생명력을 구해나가면 됩니다. 이를 위해 이분탐색을 사용합니다.
느낀 점
이분탐색의 경우 처음에 최댓값을 뭐로 설정해야 할지 고민했는데, 이 부분을 제외하고는 괜찮았습니다!
'PS (C, C++)' 카테고리의 다른 글
[백준/C++] 1245 농장 관리 (0) | 2024.11.05 |
---|---|
[백준/C++] 11000 강의실 배정 (0) | 2024.11.05 |
[백준/C++] 3649 로봇 프로젝트 (1) | 2024.11.01 |
[백준/C++] 3184 양 (0) | 2024.10.29 |
[백준/C++] 14923 미로 탈출 (1) | 2024.10.03 |