Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstdlib>
- using namespace std;
- int getLen(long long a){
- int k=0;
- while(a>0){
- k++;
- a/=10;
- }
- return k;
- }
- void FillArr(vector<int> &numbers, long long a){
- while(a>0){
- numbers.push_back(a%10);
- a/=10;
- }
- }
- void FillA(vector<int> &numbers, long long a){
- while(a>0){
- numbers[a%10]++;
- a/=10;
- }
- }
- long long ans1(vector<int> numbers, int k){
- long long a=0;
- while(k>0){
- for(int i=9;i>=0;i--){
- if(numbers[i]>0){
- k--;
- numbers[i]--;
- a*=10;
- a+=i;
- }
- }
- }
- return a;
- }
- void ans2(vector<int> numbers, int k, vector<int> numbersB, long long ans, bool bilo){
- if(k==0){
- cout<<ans;
- exit(0);
- }
- for(int i=9;i>=0;i--){
- if(numbers[i]>0){
- if(!bilo && i>numbersB[k-1]){
- }
- else{
- bool g=bilo;
- if(!bilo && i<numbersB[k-1]){
- g=true;
- }
- vector<int> clone=numbers;
- clone[i]--;
- ans2(clone, k-1, numbersB, ans*10+i, g);
- }
- }
- }
- }
- int main(){
- long long a, b;
- cin>>a>>b;
- int lenA=getLen(a);
- int lenB=getLen(b);
- vector<int> numbers(10, 0);
- FillA(numbers, a);
- vector<int> numbersB;
- FillArr(numbersB, b);
- if(lenB>lenA){
- cout<<ans1(numbers, lenA);
- }
- else{
- ans2(numbers, lenA, numbersB, 0, false);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement