SRM 551 DIV1 Easy - ColorfulChocolates

問題


http://community.topcoder.com/stat?c=problem_statement&pm=12137&rd=15173

解き方


各アルファベットごとに最大の連続数を考え、最大のものを求める。

あるアルファベットについて最大の連続数を考えるとき、
どれか1つのアルファベットの位置は変わらないことを利用する。
よって、すべての位置を起点にして同じアルファベット結合させ、
そのスワップ回数がmaxswap数以下のときの連続数をそれぞれとっていけばよい。

コード


class ColorfulChocolates {

public: int maximumSpread(string chocolates, int maxSwaps) {
int n=chocolates.size();

int ret=0;
for(char ch='A';ch<='Z';ch++){
vector<int> vx;
FORE(i,0,n)if(ch==chocolates[i])vx.push_back(i);
FORE(i,0,vx.size()){
vector<int> tmp;
FORE(j,0,vx.size())tmp.push_back(abs(vx[i]-vx[j]-(i-j)));
sort(all(tmp));

int sum=0,num=0;
FORE(j,0,vx.size()){
if(sum+tmp[j]<=maxSwaps){
num++;
sum+=tmp[j];
}
}
ret=max(ret,num);
}
}

return ret;
}

};

Share this

Related Posts

Previous
Next Post »