반응형
SMALL
최소힙, 타입 조심
#include <stdio.h>
int N, M;
typedef long long LL;
const int LN = 1e3 + 10;
void swap(LL& x, LL& y) { LL z = x; x = y; y = z; }
int minComp(LL x, LL y) { return x < y; }
struct PQ {
int hn;
LL heap[LN];
int (*comp)(LL, LL);
void init() {
hn = 0;
comp = minComp;
}
void push(LL x) {
heap[++hn] = x;
for (int c = hn; c > 1; c = c / 2) {
if (comp(heap[c], heap[c / 2])) { swap(heap[c / 2], heap[c]); }
else break;
}
}
LL pop() {
swap(heap[1], heap[hn--]);
for (int c = 2; c <= hn; c *= 2) {
if (c < hn && comp(heap[c + 1], heap[c])) { ++c; }
if (comp(heap[c], heap[c / 2])) { swap(heap[c / 2], heap[c]); }
else break;
}
return heap[hn + 1];
}
} minq;
void init() {
minq.init();
scanf("%d %d", &N, &M);
for(int n = 0; n < N; ++n) {
LL t;
scanf("%lld ", &t);
minq.push(t);
}
}
void calculate() {
for (int m = 0; m < M; ++m) {
LL O, P;
O = minq.pop();
P = minq.pop();
minq.push(O + P);
minq.push(O + P);
}
}
void print() {
LL R = 0;
while(minq.hn) {
R += minq.pop();
}
printf("%lld", R);
}
int main(void) {
// freopen("1417.txt", "r", stdin);
init();
calculate();
print();
return 0;
}
파일 읽는 구문 주석도 조심..
흐엉 ㅠ
반응형
LIST
'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
14235 - 크리스마스 선물 (0) | 2023.12.21 |
---|---|
1417 - 국회의원 선거 (1) | 2023.12.20 |
11931 - 수 정렬하기 4 (0) | 2023.12.19 |
10867 - 중복 빼고 정렬하기 (0) | 2023.12.19 |
10808 - 알파벳 갯수 (0) | 2023.12.18 |