比赛 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;
}