站外题求助
  • 板块学术版
  • 楼主cmpt_xiaoxiao
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/4 22:19
  • 上次更新2023/11/2 15:39:03
查看原帖
站外题求助
954694
cmpt_xiaoxiao楼主2023/10/4 22:19

题目描述

给定一个不含前导 0 的正整数 n 。现在s要对这个数字进行最多 k 次操作,每次操作可以交换这个数字中任意两个相邻的数位。

s希望在操作以后这个数字尽可能大,请你输出这个最大值。

输入格式

本题为多组输入,第一行一个正整数 T 表示数据组数。

接下来 T 行,每行两个整数 n,k 分别表示最初的数字和最多操作次数。

输出格式

对于每组数据,输出一行一个整数,表示对应的答案。

样例输入

4

1990 1

300 0

1034 2

9090000078001234 6

样例输出

9190

300

3104

9907000008001234

数据范围

对于 20% 的数据,保证 n≤100 。

对于另外 20% 的数据,保证 k=1 。

对于另外 20% 的数据,保证 n≤100000,k=2 。

对于 100% 的数据,保证 1≤n≤1018,0≤k≤100,1≤T≤1000 。

WA code

#include<iostream>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--){
		string n;
		int k=0;
		cin>>n>>k;
		for(int i=0;i<n.length();i++){
			if(n[i]=='9') continue;
			int ma=int(n[i]-48),p=i;
			for(int j=i+1;j<=i+k;j++){
				if(int(n[j]-48)>ma){
					ma=int(n[j]-48);
					p=j;
				}
			}
			for(int j=p;j>i;j--){
				swap(n[j],n[j-1]);
				k--;
			}
		}
		cout<<n<<endl;
	}
	return 0;
}
2023/10/4 22:19
加载中...