less than 1 minute read

사용언어

Visual studio 2019 C++

원래 이문제를 풀려고 했던건 아닌데… 11066번 파일합치기 문제를 잘못이해 했는데 이 문제의 답이라서.. 풀게된…문제………

[13975 풀이]

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>

#define endl "\n"
using namespace std;

vector<long long> v;

void init() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
}

void file() {
	int k;
	cin >> k;
	v.resize(k);

	for (int i = 0; i < k; i++)
		cin >> v[i];

	long long result = 0;

	priority_queue<long long> pq;
	for (int i = 0; i < k; i++)
		pq.push(-v[i]);

	while (1) {
		if (pq.size() == 1)
			break;
		long long a = -pq.top();
		pq.pop();
		long long b = -pq.top();
		pq.pop();

		result += (a + b);
		pq.push(-(a + b));

	}
	cout << result << endl;
}

int main() {
	init();
	int t; cin >> t;
	while (t--)
		file();
}

Categories:

Updated:

Comments