先说一下优先队列的使用
首先需要两个头文件include && include
其次普通的int型默认是从小到大排列:
priority_queue == priority
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<functional>
#include<queue>
#include<algorithm>
#include<string>
#define MAXNUM 150
using namespace std;
string str;
int cnt[40];
priority_queue<int,vector<int>,greater<int>> que;
int main()
{
freopen("1.txt", "r", stdin);
int i, j, k, a, b, c, ans, count;
float tmp;
while (cin >> str)
{
if (str == "END")
break;
memset(cnt, 0, sizeof(cnt));
while (!que.empty())
que.pop();
for (i = 0; i < str.length(); i++)
{
if (str[i] == '_')
cnt[26]++;
else
cnt[str[i] - 'A']++;
}
ans = 0;
count = 0;
for (i = 0; i <= 26; i++)
{
if (cnt[i])
{
que.push(cnt[i]);
count++;
}
}
if (count == 1)
{
ans = que.top();
}
else
{
while (que.size() > 1)
{
a = que.top(); que.pop();
b = que.top(); que.pop();
que.push(a + b);
ans = ans + a + b;
}
}
tmp = float(str.length() * 8);
printf("%d %d %.1f\n", str.length() * 8, ans, tmp / ans);
}
}