请写代码输出哈夫曼编码的平均长度。
输入: 第1行为1个整数,表示输入数据中有n种字符。
第2-n+1行为n个整数,表示每个字符出现的次数。
输出: 哈夫曼编码的平均长度(保留两位小数)。
sample input:
4
1
2
3
4
sample out:
1.90
#include<iostream>
#include<queue>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
int m = 0;
int n;
cin >> n;
vector<int>myvector;
while (n--)
{
int x;
cin >> x;
myvector.push_back(x);
m = m + x;
}
sort(myvector.begin(), myvector.end());
int sum = 0;
while (myvector.size() > 1)
{
int a = myvector[0];
int b = myvector[1];
sum = sum + a + b;
myvector.erase(myvector.begin(), myvector.begin() + 2);
myvector.push_back(a + b);
sort(myvector.begin(), myvector.end());
}
printf("%.2lf\n", (double)sum / m);
return 0;
}