*[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";
}
};

  

上一篇:“一切都是消息”--iMSF(即时消息服务框架)之【发布-订阅】模式


下一篇:linux的基本操作与常见命令