[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];

	}

};

 

你可能感兴趣的:(topcoder)