Advertisement
happy_nesquik

Untitled

Dec 15th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define _ ios_base::sync_with_stdio(0);cin.tie(0);
  6. #define endl '\n'
  7. #define pb push_back
  8.  
  9. typedef long long ll;
  10.  
  11.  
  12. int main(){ _
  13.    
  14.     int n;
  15.     cin >> n;
  16.     for(int k=0; k<n; k++){
  17.         string a, b;
  18.         cin >> a >> b;
  19.         bool flag = false;
  20.         int m_a = 0;
  21.         int at = 0;
  22.         // menor string de a
  23.         for(int i=0; i<a.size(); i++){
  24.             if(a[i]<=a[m_a]) m_a = i;
  25.         }
  26.         if(a[m_a] < b[0]){
  27.             swap(a[m_a], a[0]);
  28.             cout << a << endl;
  29.             continue;
  30.         }
  31.         for(int i=0; i<a.size() && i<b.size() && i<m_a; i++){
  32.             if(a[m_a]<b[i]){swap(a[i], a[m_a]); cout << a << endl; flag=true; break;}
  33.             if(a[i]>b[i]) break;
  34.         }
  35.         if(flag) continue;
  36.         for(int i=0; i<a.size() && i<b.size(); i++){
  37.             if(a[m_a]==b[i] and a[i]!=b[i] and i<m_a){
  38.                 swap(a[i], a[m_a]);
  39.                 for(int j=0; j<a.size() && j<b.size(); j++){
  40.                     if(a[j]<b[j]){cout << a << endl; flag = true; break;}
  41.                     if(a[j]>b[j]) break;
  42.                 }
  43.                 if(flag) break;
  44.                 for(int j=0; j<a.size() && j<b.size(); j++){
  45.                 if(a[j]==b[j]){    
  46.                         if(a[j]==a[at]) at++;
  47.                     }
  48.                     else break;
  49.                 }
  50.                 if(at==a.size() and a!=b and a[0]==b[0]){ cout << a << endl; flag=true;}
  51.             }
  52.             if(a[i]>b[i]) break;
  53.         }
  54.        
  55.  
  56.         if(flag) continue;
  57.         // olha se a é menor
  58.         for(int i=0; i<a.size() && i<b.size(); i++){
  59.             if(a[i]<b[i]){cout << a << endl; flag = true; break;}
  60.             if(a[i]>b[i]) break;
  61.         }
  62.         if(flag) continue;
  63.         at=0;
  64.         // olha se a é sufixo e até onde são iguais
  65.         for(int i=0; i<a.size() && i<b.size(); i++){
  66.             if(a[i]==b[i]){    
  67.                     if(a[i]>=a[at]) at++;
  68.             }
  69.             else break;
  70.         }
  71.         if(flag) continue;
  72.         if(at==a.size() and a!=b and a[0]==b[0]){ cout << a << endl; continue;}
  73.         if(at==b.size() and a!=b and a[0]==b[0]){ cout << "---" << endl; continue;}
  74.        
  75.         cout << "---" << endl;
  76.         continue;      
  77.  
  78.  
  79.         //são diferentes em 0?
  80.         bool d0 = a[0]>b[0];
  81.         int iguais = 0;
  82.         if(d0){
  83.             for(int i=0; i<a.size(); i++){
  84.                 if(a[i]<b[0]) {swap(a[iguais], a[0]); swap(a[i], a[0]); cout << a << endl; flag=true; break;}
  85.                 if(a[i]==b[0]) {swap(a[iguais], a[0]); swap(a[i], a[0]); iguais=i;}
  86.             }
  87.         }
  88.         if(flag) continue;
  89.             //a é menor?
  90.         for(int i=0; i<a.size() && i<b.size(); i++){
  91.             if(a[i]<b[i]){cout << a << endl; flag = true; break;}
  92.             if(a[i]>b[i]) break;
  93.         }
  94.         if(flag) continue;
  95.         int at2=0;
  96.  
  97.         cout << a << endl;
  98.         // a é sufixo?
  99.         for(int i=0; (i<a.size() && i<b.size()); i++){
  100.             if(a[i]==b[i]) at2++;  
  101.             else break;
  102.         }      
  103.         if(at2==a.size() and a!=b and a[0]==b[0]){ cout << a << endl; continue;}
  104.         if(at2==b.size() and a!=b and a[0]==b[0]){ cout << "---" << endl; continue;}
  105.    
  106.         //sao diferentes em at+1
  107.         iguais = at+1;
  108.         //cout << b[at+1] << endl;
  109.         for(int i=at+1; i<a.size(); i++){
  110.             if(a[i]<b[at+1]) {swap(a[at+1], a[iguais]); swap(a[i], a[at+1]); cout << a << endl; flag=true; break;}
  111.             if(a[i]==b[at+1]) {swap(a[iguais], a[at+1]); swap(a[i], a[at+1]); iguais=i;}
  112.         }
  113.         if(flag) continue;
  114.         for(int i=0; (i<a.size() && i<b.size()); i++){
  115.             if(a[i]<b[i]){cout << a << endl; flag = true; break;}
  116.             if(a[i]>b[i]) break;
  117.         }
  118.         if(flag) continue;
  119.         // a é sufixo?
  120.         at2=0;
  121.         for(int i=0; (i<a.size() && i<b.size()); i++){
  122.             if(a[i]==b[i]){ ++at2;}
  123.             else break;
  124.         }  
  125.         if(at2==a.size() and a!=b){ cout << a << endl; continue;}
  126.         if(at2==b.size() and a!=b){ cout << "---" << endl; continue;}
  127.        
  128.         cout << "---" << endl;
  129.    
  130.     }
  131.  
  132.     exit(0);
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement