题目链接:Codeforces 435B Pasha Maximizes
贪心,简单来说就是改前边的总是比改后边的要好。
先改第一个,往后看k步,找到最大值并记录下标,移动这之间的元素,修改k值,如果k大于0,改第二个,以此类推。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string s;
char _max, temp;
int k, len, j = 0, i, p;
cin >> s >> k;
len = s.length();
while(k > 0 && j < len)
{
_max = s[j];
p = -1;
for(i = j + 1; i < len && i <= j + k; i++)
{
if(_max < s[i])
{
_max = s[i];
p = i;
}
}
if(p != -1)
{
for(int x = p; x > j; x--)
{
temp = s[x];
s[x] = s[x - 1];
s[x - 1] = temp;
}
//s[p] = s[j];
//s[j] = _max;
k -= p - j;
}
j++;
}
cout << s << endl;
return 0;
}