zoukankan      html  css  js  c++  java
  • Codeforces Round #249 (Div. 2) B. Pasha Maximizes

    看到题目的时候,以为类似插入排序,比较第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;
    }
    

      

  • 相关阅读:
    mysql 统计新增每天数据
    Oracle dg下掉一个从库
    rman全备脚本
    Linux Shell 统计一(行列)数值的总和及行、列转换
    pt工具加字段脚本
    MySQL慢日志切割邮件发送脚本
    MySQL主从复制邮件报警脚本
    读书清单
    数据库学习笔记
    JAVAEE学习笔记
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3786227.html
Copyright © 2011-2022 走看看