SRM 497 DIV1 Easy - PermutationSignature

問題


http://community.topcoder.com/stat?c=problem_statement&pm=11115&rd=14426

解き方


配列の数が50個なのですべての組み合わせは求められないので
順番が決まるか、貪欲法で求められるはず。

左から数を調べていくとすると、その数は昇順である方がよいので、
その点から連続するDの数だけ確保しておけば、そのうち最小の数を
とってもよいことがわかる。

よって、そのようにして左側から数を決定していく。l

コード


class PermutationSignature {

public:

vector<int> reconstruct(string signature) {
int n=signature.size()+1;
int used[n+1];

memset(used,0,sizeof(used));

vector<int> ans;
FORE(i,0,n){
int cnt=0;
FORE(j,i,signature.size()){
if(signature[j]!='D')break;
cnt++;
}

int x=1;
while(used[x])x++;
while(cnt>0){
x++;
if(used[x])continue;
cnt--;
}
ans.push_back(x);
used[x]=1;
}

return ans;
}

};

Share this

Related Posts

Previous
Next Post »