图片中是我的详细思路
下面是代码:
#include<bits/stdc++.h>
using namespace std;
# define ll unsigned long long
#define endl '\n'
vector<char> v;
int n=0;
void solve()
{
v.clear();
string l,r; cin>>l>>r;
if(l.size()==1) {cout<<l<<endl; return ;}//���
if(l.size()<r.size())
{
for(int i=0;i<l.size();++i)
cout<<9;
cout<<endl;
return ;
}
if(l==r) {cout<<l<<endl; return ;}
if(r[0]-l[0]>=2)
{
for(int i=0;i<l.size();++i)
{
cout<<l[0]-'0'+1;
} cout<<endl;
return;
}
int flag=99;
string ans="";
ll L=stoll(l),R=stoll(r);
// cout<<"L"<<l<<"R"<<r<<endl;
for(int i=0;i<l.size();++i)
{
v.push_back(l[i]);
sort(v.begin(),v.end());
char small=v.front(), big=v.back();
//cout<<small<<" "<<big<<endl;
string qian=l.substr(0,i+1);
string hou(l.size()-i-1, big);
if(hou!="")
qian=qian+hou;
else qian=qian;
ll rr=big-small;
ll t1=0;
t1= stoull(qian);
if(t1>=L&& t1<=R )
{
if(rr<flag)
{
ans=qian;
flag=rr;
}
}
}
v.clear();
for(int i=0;i<r.size();++i)
{
v.push_back(r[i]);
sort(v.begin(),v.end());
char small=v.front(), big=v.back();
string qian=r.substr(0,i+1);
string hou(r.size()-i-1, small);
if(hou!="")
qian=qian+hou;
else qian=qian;
ll rr=big-small;
ll t1=stoull(qian);
if(t1>=L&& t1<=R )
{
if(rr<flag)
{
ans=qian;
flag=rr;
}
}
} cout<<ans<<endl;
}
int main()
{
// std::ios_base::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);
int T=1;
cin>>T;
while(T--)
{
solve();
}
}