使用优先队列,从小往大取,构造哈夫曼树。
#include <bits/stdc++.h>
using namespace std;
string a;
int ans, t[200];
priority_queue<int, vector<int>, greater<int>> v;
int main()
{
cin >> a;
for (int i = 0; i < a.length(); i++)
t[a[i]]++;
for (int i = 'a'; i <= 'z'; i++)
if (t[i])
v.push(t[i]);
if (v.size() == 1)
return printf("%d\n", a.length()) & 0;
while (v.size() != 1)
{
int k = 0;
k += v.top();
v.pop();
k += v.top();
v.pop();
v.push(k);
ans += k;
}
printf("%d", ans);
return 0;
}