codeforces 435B

题意:只能对相邻的两个数字进行交换,允许k次交换,输出交换能得到的最大的数。从最高位开始寻找最优,每次寻找能交换的步数里交换到的最大值进行交换。

 

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char num[30];
int main() {
    int k;
    scanf("%s%d",num,&k);
    int len=strlen(num);
    for(int i=0;i<len;i++) {
        if(num[i]<'9') {
            char temp=num[i];
            int flag=i;
            for(int j=i+1;j<len && j<=i+k;j++) { //找出num[i+1]~num[i+k]中最大的 
                if(num[j]>temp) {
                    temp=num[j];
                    flag=j;
                }
            }
            if(flag!=i) {
                for(int j=flag-1;j>=i;j--) swap(num[j+1],num[j]);
          k
-=flag-i; } } } for(int i=0;i<len;i++) printf("%c",num[i]); printf("\n"); return 0; }

 

posted @ 2016-07-26 21:50  _LinesYao  阅读(90)  评论(0编辑  收藏  举报