荷马史诗BZOJ4198

荷马史诗BZOJ4198

思路

题干在这:BZOJ4198
Huffman编码,没啥好说的

ac代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<queue>
#include<cstring>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
struct word {
	ll deep;
	ll fre;
	friend bool operator <(const word& a, const word& b) {
		return a.fre == b.fre ? a.deep > b.deep :a.fre > b.fre;
	}
};
priority_queue<word> huffman;
int main() {
	ll n, k;
	cin >> n >> k;
	for (ll i = 0; i < n; i++) {
		word x;
		scanf_s("%lld", &x.fre);
		x.deep = 0;
		huffman.push(x);
	}
	if ((n - 1) % (k - 1) != 0) {
		for (ll i = 0; i < k - 1 - (n - 1) % (k - 1); i++) {
			word x = { 0,0 };
			huffman.push(x);
		}
	}
	ll minlen = 0, all = 0;
	while ((ll)huffman.size() != 1) {
		word x;
		x.deep = x.fre = 0;
		for (int i = 0; i < k; i++) {
			x.deep = max(x.deep, huffman.top().deep);
			x.fre += huffman.top().fre;
			huffman.pop();
		}
		x.deep++;
		minlen = x.deep;
		all += x.fre;
		huffman.push(x);
	}
	cout << all << endl << minlen;
}
发布了24 篇原创文章 · 获赞 0 · 访问量 346

猜你喜欢

转载自blog.csdn.net/qq_45616764/article/details/104254117
今日推荐