728x90
반응형
28703번: Double It
문제
https://www.acmicpc.net/problem/28703
28703번: Double It
$31$에 $2$를 곱해서 $62$로, $41$에 $2$를 곱해서 $82$로, $51$ 에 $2$를 곱해서 $102$로, $3$에 $2$를 $5$번 곱해서 $96$으로 만들면, $A$의 최댓값 $102$와 최솟값 $62$의 차이가 $40$으로 최소가 됩니다.
www.acmicpc.net
풀이
본 대회 때는 삽질만 종일 하다가 결국 못 푼 문제. 에디토리얼 참고해서 풀었다.
배열의 최솟값을 두배로 증가시켜 가며 최댓값과의 차를 최솟값으로 비교하며 업데이트한다.
이를 최솟값이 처음 배열의 최댓값보다 작을 때만 계속해서 반복한다.
최솟값 관리를 우선순위 큐로 하면 된다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m = 0;
cin >> n;
priority_queue<int> q;
while (n--) {
int x;
cin >> x;
m = max(m, x);
q.push(-x);
}
int mx = m;
int ans = mx + q.top();
while (-q.top() < m) {
int x = -q.top();
q.pop();
ans = min(ans, mx - x);
mx = max(mx, 2 * x);
q.push(-2 * x);
}
cout << min(mx + q.top(), ans);
return 0;
}
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 / BOJ] C++ 28445 알록달록 앵무새 (2) | 2023.08.17 |
---|---|
[백준 / BOJ] C++ 28444 HI-ARC=? (2) | 2023.08.17 |
[백준 / BOJ] C++ 28702 FizzBuzz (0) | 2023.08.15 |
[백준 / BOJ] C++ 28701 세제곱의 합 (0) | 2023.08.15 |
[백준 / BOJ] C++ 17430 가로등 (4) | 2023.08.12 |