[topcoder]BoxesDiv2
https://community.topcoder.com/stat?c=problem_statement&pm=13192
#include <vector>
#include <queue>
#include <functional>
using namespace std;
class BoxesDiv2
{
public:
vector<int> power2;
int findSize(vector <int> candyCounts)
{
priority_queue<int, vector<int>, greater<int> > q;
power2.clear();
int tmp = 1;
for (int i = 0; i < 32; i++)
{
power2.push_back(tmp);
tmp *= 2;
}
int size = candyCounts.size();
for (int i = 0; i < size; i++)
{
int x = leastPower(candyCounts[i]);
q.push(x);
}
while (q.size() > 1)
{
int a = q.top();
q.pop();
int b = q.top();
q.pop();
int bigger = max(a,b);
q.push(bigger*2);
}
if (!q.empty())
{
return q.top();
}
else
{
return -1;
}
}
int leastPower(int x)
{
int i = 0;
while (x > power2[i])
i++;
return power2[i];
}
};

浙公网安备 33010602011771号