#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的写法,更加方便。然后还有优先队列的注意点
该博客主要展示了如何利用C++的优先队列(priority_queue)来解决数字组合求和问题。代码中首先读取字符串输入,将字符转换为整数并存储在数组中,然后通过广度优先搜索(BFS)计算所有可能的数字组合总和。程序还包含了对输入字符串的处理,以及最后输出组合总和及其效率指标。
9068

被折叠的 条评论
为什么被折叠?



