#include<queue>
#include<xstring>
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int n, m, ans;
int num[30];
string str;
int bfs() {
int sum = 0;
priority_queue <int, vector<int>, greater<int> >q;//升序
for (int i = 0; i <= 26; i++)if (num[i])q.push(num[i]);
if (q.size() == 1) sum = q.top();
while(q.size() > 1) {
int a, b;
a = q.top(); q.pop();
b = q.top(); q.pop();
int m = a + b;
sum += m; q.push(a + b);
}
return sum;
}
int main() {
while (cin >> str) {
if (str == "END")break;
memset(num, 0, sizeof(num));
int n = str.size();
//str.size()
for (int i = 0; i < n; i++) {
if (str[i] == '_') num[26]++;
else num[str[i] - 'A']++;
}
int t = bfs();
printf("%d %d %.1f", n * 8, t, n * 8 * 1.0 / t);
}
}
学习printf的写法,更加方便。然后还有优先队列的注意点