码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #249 (Div. 2) B. Pasha Maximizes

时间:2014-06-14 21:46:18      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:class   blog   code   string   os      

看到题目的时候,以为类似插入排序,比较第i个元素和第i-1个元素,

如果第i个元素比第i-1个元素小,则不交换

如果第i个元素比第i-1个元素大,则交换第i个元素和第i-1个元素

  继续比较第i-1个元素与前一个元素,直到前一个元素大为止

交换元素次大于等于k则停止

但对测试用例

1234 3

则出现问题,如果按照上述方法得到答案为3214,

但正确答案是4321,直接将第4个元素往前交换

故在上面基础上改进得

当扫描第i个元素时,则要取出[i,i+k+1)之间的最大元素,然后将最大元素往前交换,则交换后第i个元素肯定是最大的

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

int main(){
    string s;
    int k;
    cin >> s >> k;
	int len = s.length();
    for(int i = 0 ; i < len; ++ i){
		int maxIndex = i;
		for(int j = i +1; j < min(len,i+k+1); ++ j){
			if(s[maxIndex] < s[j]) maxIndex = j;
		} 
		for(int j = maxIndex; j > i; --j){
			swap(s[j],s[j-1]);
			k--;
		}
    }
    cout<<s<<endl;
}

  

 

Codeforces Round #249 (Div. 2) B. Pasha Maximizes,布布扣,bubuko.com

Codeforces Round #249 (Div. 2) B. Pasha Maximizes

标签:class   blog   code   string   os      

原文地址:http://www.cnblogs.com/xiongqiangcs/p/3786227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!