75pts,有re,求调
查看原帖
75pts,有re,求调
769261
AlanCoder楼主2023/12/23 21:04
/*********************************************************************
    PROGRAM: [NOI2015] 荷马史诗
    ALGORITHM: Heap, HaffmanTree
    AUTHOR: A1anC0der
    DATETIME: 2023-12-23 20:05
    NUMBER: P2168
*********************************************************************/
#include <bits/stdc++.h>
using namespace std;

struct node {
	long long w, h;
	node() {
		w = 0, h = 0;
	}
	node(long long w, long long h): w(w), h(h) {}
	bool operator < (const node &a)const {
		return a.w == w ? h > a.h : w > a.w;
	}
};
long long n, k, ans;
priority_queue<node> q;

int main() {
	cin >> n >> k;
	for (long long i = 1; i <= n; i++) {
		long long input;
		cin >> input;
		q.push(node(input, 1));
	}
	long long d = (n - 1) % (k - 1);
	for (long long i = 1; i <= d; i++) {
		q.push(node(0, 1));
	}
	while (q.size() > 1) {
		long long h = -1;
		long long sum = 0;
		for (long long i = 1; i <= k; i++) {
			node tmp = q.top();
			q.pop();
			h = max(h, tmp.h);
			sum += tmp.w;
		}
		q.push(node(sum, h + 1));
		ans += sum;
//		cout << q.size() << '!' << ans << ' ';
	}
	cout << ans << endl;
	cout << q.top().h - 1 << endl;
	return 0;
}
2023/12/23 21:04
加载中...