悬关,30pts求调
查看原帖
悬关,30pts求调
1275819
nzlys04楼主2024/8/1 20:10
#include<bits/stdc++.h>
using namespace std;
string a;
int k,last,l,ans[255],zz=1;
int main(){
	cin>>a>>k;
	l=a.size();
	while(k>0){
		int now,z=10;
		for(int i=last;i<k+last+1;i++){
			if(a[i]-'0'<z)z=a[i]-'0',now=i;
		}
		ans[zz++]=a[now]-'0';
		a[now]='9'+2,k-=now-last;
		last=now;
//		cout<<z<<" "<<k<<endl;
	}
	for(int i=1;i<zz;i++)cout<<ans[i];
	return 0;
}

思路:每次从上个保留的数往后kk个数中取最小作为保留的下一个数,并将中间的数全部删掉(kk减少now−lastnow-last),直到kk变成0为止

2024/8/1 20:10
加载中...