TopCoder Open 2014 Round1A Easy EllysSortingTrimmer
問題
文字列に対して次の操作が行える。
好きなiを決める。
先頭のi文字はそのままにして、次からのL文字を、アルファベットの小さい順にソートする。
残りの文字は捨てる。
与えられた文字列Sおよび整数Lについて、
この操作を好きなだけSに適用してできる文字列のうち辞書順で最小のものを求めよ。
制約条件
n≦50
方針
完成する文字はL文字。
(L+1文字以上の答えがあったとすると、i = 0でこの操作を行えば必ずよりよい答えが得られる)
後ろから毎回1文字ずつ削ってソートしていけばよい。
ソートをしない場所があったとすると、そこでソートしたとしても答えが悪くならないため。
ソースコード
class EllysSortingTrimmer { public: string getMin(string S, int L) { while(S.size() > L){ sort(S.end() - L, S.end()); sort(S.end() - L - 1, S.end() - 1); S.erase(S.end() - 1); } sort(all(S)); return S; } };