还是优先队列
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector<int>a = { 5,12,11,2 };
int maxtimes, mintimes = 0;
int main()
{
priority_queue<int, vector<int>, greater<int>> q1;
priority_queue<int, vector<int>, less<int>>q2;
for (int i = 0; i < (int)a.size(); i++)
{
q1.push(a[i]);
q2.push(a[i]);
}
while (q2.size())
{
int temp;
if (q2.size() != 1)
{
maxtimes += q2.top();
temp = q2.top();
q2.pop();
maxtimes += q2.top() - 1;
temp += q2.top();
q2.pop();
q2.push(temp);
}
else
q2.pop();
}
while (q1.size())
{
int temp;
if (q1.size() != 1)
{
mintimes += q1.top();
temp = q1.top();
q1.pop();
mintimes += q1.top()-1;
temp += q1.top();
q1.pop();
q1.push(temp);
}
else
q1.pop();
}
cout << maxtimes <<' '<<mintimes << endl;
}