*[topcoder]IncrementingSequence

http://community.topcoder.com/stat?c=problem_statement&pm=12107

此题想了半天,当时瞥到了Greedy,所以就想着贪心,最后的方法又纸上画了一下应该是对的。就是排序后依次看是不是满足要求。证明就是如果对数字X,有a和b都能够通过增加k的倍数步得到X,那么使用小的a自然更好,因为b有更大机会为剩下的出力。

#include <string>

#include <vector>

#include <algorithm>

using namespace std;



class IncrementingSequence {

public:

	string canItBeDone(int k, vector <int> A)

	{

		sort(A.begin(), A.end());

		vector<bool> used(A.size());

		for (int i = 1; i <= A.size(); i++)

		{

			for (int j = 0; j < A.size(); j++)

			{

				if (used[j])

					continue;

				if (A[j] > i)

					return "IMPOSSIBLE";

				if ((A[j] - i) % k == 0)

				{

					used[j] = true;

					break;

				}

			}

		}

		return "POSSIBLE";

	}

};

  

你可能感兴趣的:(sequence)