比赛 |
4043级NOIP2022欢乐赛2nd |
评测结果 |
AAAAAAAAAA |
题目名称 |
定价 |
最终得分 |
100 |
用户昵称 |
ZRQ |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2022-10-31 21:29:09 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
const ll INF=1e14;
int T;
ll l,r,res,ans;
ll poww(ll a,ll b)
{
ll ans=1,base=a;
while(b)
{
if(b&1) ans*=base;
base*=base;
b>>=1;
}
return ans;
}
void calc(ll a)
{
ll k=0,cnt=0,x=a,b;
while(a%10==0) ++cnt,a/=10;
b=a;
while(a) ++k,a/=10;
if((b/10*10+5)*poww(10,cnt)>=l&&(b/10*10+5)*poww(10,cnt)<=r)
{
if(2*k-1<res) res=2*k-1,ans=(b/10*10+5)*poww(10,cnt);
else if(2*k-1==res&&(b/10*10+5)*poww(10,cnt)<ans) ans=(b/10*10+5)*poww(10,cnt);
}
if(a%10==5)
{
if(2*k-1<res) ans=x;
else if(2*k-1==res&&x<ans) ans=x;
}
if(2*k<res) res=2*k,ans=x;
else if(2*k==res&&x<ans) ans=x;
return ;
}
int main()
{
freopen("absurd.in","r",stdin);
freopen("absurd.out","w",stdout);
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&l,&r);
res=INF;
calc(l);
for(int i=1;l>=poww(10,i);++i)
{
ll k;
k=(l/poww(10,i)+1)*poww(10,i);
if(k<l) continue;
if(k>r) break;
calc(k);
}
if(res==1)
{
printf("%lld\n",ans);
continue;
}
for(int i=1;poww(10,i)<=r;++i)
{
if(poww(10,i)<l) continue;
if(poww(10,i)<=r)
{
if(2<res) res=2,ans=poww(10,i);
if(res==2&&poww(10,i)<ans) ans=poww(10,i);
}
if(poww(10,i)*5<=r)
{
if(1<res) res=1,ans=poww(10,i)*5;
if(res==1&&poww(10,i)*5<ans) ans=poww(10,i)*5;
}
}
printf("%lld\n",ans);
}
return 0;
}