백준 16434 문제
321
작성한 질문수 2
http://boj.kr/904d5fdfb1014610bca4d8d8b46ad8b5
저는 일단 생각한게 매번 방마다 필요한 체력을 구할 때
(용사가 드래곤을 죽이기 위해 때리는 횟수-1) x 드래곤의 공격력 = 필요한 체력 이라는 공식을 세웠고,
n이 최대 백만개이니깐 최소 nlogn으로 구하기 위해서 매번 방마다 용사가 드래곤을 죽이기 위해 때리는 횟수를 이분탐색을 이용해서 구한 뒤
포션방을 들어갔을 때, ans을 갱신하고 그 포션의 체력과 현재 필요한 체력을 비교해서 sum(필요한 체력)을 두가지 경우로 나눠서 ( 포션이 필요한 체력보다 크다면 sum=0으로 갱신, 포션이 필요한 체력보다 작다면
sum=필요한 체력 - 포션) 으로 갱신하고 다음 방으로 들어가는 알고리즘을 짰습니다.
문제나 질문 게시판에 있는 반례들은 다 돌아가는데 채점을 하면 2퍼센트에서 터집니다. 무엇이 문제일까요?...
답변 1
0
질문게시판에 있는 반례들을 다 하셨다고 하길래 수만km를 거쳐 반례를 찾아왔습니다.(제가 생각한 겁니당~)
감사합니다.
0
감사합니다.. 이 문제는 long long 범위를 초과해서 나타난 문제였네요.. INF 범위를 줄여서 다시 제출했는데 2퍼에서 여전히 터지네요.. 이 문제가 아닌가 봅니다ㅠㅠ
0
그게 아니죠. 이 코드 자체가 초기 공격력이 넘쳤을 때를 대응을 못하는 거잖아요. 디버깅을 해보면 mid가 이상하게 가는 걸 볼 수가 있어요.
#include<bits/stdc++.h>
using namespace std;
int n, atk;
long long ans = 0;
vector<tuple<int, int, int>> v;
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> atk;
for (int i = 0; i < n; i++) {
int a, b, c;
cin >> a >> b >> c;
v.push_back({ a,b,c });
}
long long sum = 0;
for(int i=0;i<n;i++){
int info, atk1, h; // 정보 , 공격력 ,체력
tie(info, atk1, h) = v[i];
if (info == 1) {
long long l = 0, r = 1e18+4, mid;
long long cnt = 1e18+4;
while (l <= r) {
mid = (l + r) >> 1;
if (mid * atk >= h) {
cnt = min(cnt, mid);
r = mid - 1;
}
else l = mid + 1;
cout << mid << '\n';
}
sum += (cnt - 1) * atk1;
//if (i == n - 1) sum++;
}
else {
//sum++;
if (ans < sum+1) ans = sum + 1;
if (sum > h) sum -= h;
else sum = 0;
atk += atk1;
}
//cout << sum << endl;
}
if (ans < sum+1) ans = sum + 1;
cout << ans;
}
/*
1 100 1 1 1
500000000000000000
750000000000000000
625000000000000000
*/
0
r의 값을 1e13으로 줄이면 mid가 감소하면서 1로 나옵니다! r을 1e18로 크게 잡다보니 mid x (용사 공격력) 이 long long 범위를 초과해서 이상하게 나온거 같은데.. 맞는지는 모르겠습니다
원래 그냥 몇번을 때릴지 구하려면 for문 한번으로 구하면 O(n)인데 그럼 n^2으로 시간초과가 나서 이걸 logn에 구하기 위해서 이분탐색을 썻습니다.
0
네 long long 을 초과해서 그렇게 되는 거구요. 1,000,000이 용사의 최대 초기공격력이라 이 코드가지고는 long long 범위를 무조건 초과해서 안 될 것같아요.
1-E질문입니다!
0
518
2
3-L 틀린 부분 피드백 부탁드립니다.
0
820
2
1-A문제 순열재귀함수 질문입니다.
0
381
1
1-A 일곱난쟁이문제입니다
0
456
1
문제 풀 때 방향성에 대해
0
800
1
맥에서 vs code로 실행 관련 질문입니다
0
523
1
17071번 메모리 초과
0
386
1
1-C질문입니다!
0
419
2
2-B BFS 시간초과질문
0
629
2
1-O 13번 라인
0
441
1
6-J 놀이공원 문제 질문
0
381
1
구현관련 질문
0
483
1
강의 교안
0
319
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
545
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
535
1
1-K
0
473
2
3-G번 질문있습니다.
1
473
3
3-C 실행 시간 질문드립니다.
0
493
1
4-A 문제 풀이 질문있습니다.
0
590
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
435
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
334
1
3-O go 함수 질문 드립니다.
1
446
2
4-A 출력 질문
0
303
1
1주차 1-O 질문드립니다
0
257
1





