题目链接:http://codeforces.com/problemset/problem/915/C
---------------------------------------------------------------------------------
题意:给你两个数 a和 b,可以打乱 a每位数的顺序,让你求满足 小于等于b 的最大值。。
思路:首先,观察到数值比较大,所以采用字符串读入的方式进行处理,通过比较字典序,交换不同位数是的保证每一次操作都是最优解。
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<cmath> #include<set> #include<list> #include<deque> #include<map> #include<queue> using namespace std; typedef long long ll; const double PI = acos(-1.0); const double eps = 1e-6; int numa =0; int numb =0; int main(void){ string a ; string b ; string sav; cin>>a>>b; numa = a.length(); numb =b.length(); //printf("%d %d\n",numa,numb); sort(a.begin(),a.end()); if(numa<numb){ reverse(a.begin(),a.end()); cout<<a<<endl; return 0; } for(int i=0;i<numa;i++) { for(int j=numa-1;j>i;j--) { sav=a; swap(a[i],a[j]); sort(a.begin()+i+1,a.end()); if(a.compare(b)>0) a=sav; else break; } } cout<<a<<endl; return 0; }