CodeForces - 915C 字符串

 input a b

 output: a中经过排列后的最大的数 同时满足比b

#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int INF=1e9+7;
string a,b;
int main(){
	cin>>a>>b;
	int n=a.length();
	if(n<b.length()){
		sort(a.begin(),a.end());reverse(a.begin(),a.end());
		cout<<a<<'\n';
	}else{
		sort(a.begin(),a.end());
		rep(i,n){ // 0到size-1
			int j=i;
			for(;j<n&&a.substr(0,i)+string(1,a[j])+a.substr(i,j-i)+a.substr(j+1)<=b;j++); //满足j++的条件
				j--;

			// cout << a.substr(0,i) << ' '<< string(1,a[j]) << ' '<< a.substr(i,j-i) << ' '<< a.substr(j+1) << endl;
			// cout <<  a.substr(0,i)+string(1,a[j])+a.substr(i,j-i)+a.substr(j+1) << endl << endl;

			a=a.substr(0,i)+string(1,a[j])+a.substr(i,j-i)+a.substr(j+1);
		}
		cout<<a<<'\n';
	}
	return 0;
}
substr:
string a;

int main() {
    a = "01234567891011121314151617181920";
    int i = 5;
    int j = 10;
    cout << a.substr(0,i) << ' '<< string(1,a[j]) << ' '
            << a.substr(i,j-i) << ' '<< a.substr(j+1) << endl;

    /*    01234 56789 1 011121314151617181920 分为4部分
          01234 1 56789 011121314151617181920 替换2、3部分
        
        a.substr(0,i)+a.substr(i,j-i)+string(1,a[j])+a.substr(j+1);
        0到i        i到j-1      1个a[j]     j+1到字符串结尾*/
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值