题解 P4109 【[HEOI2015]定价】
此题乍看会超时
但是我考试时本想暴力骗分
结果优化着优化着发现好像不超了,于是A掉
本题暴力递归(贪心)可做
至于优化,想通一个点即可:
为什么不加指数?
想到10的幂就好办了
#include<bits/stdc++.h>
using namespace std;
long long n,L,R,minn=0,res=1,cs=1,pd;
long long pdd(long long x,long long y)
{
for(long long i=x;i<=y;i++)
{
if(i%10==0||i%10==5)
{
return 0;
}
}
return 1;
}
long long ws(long long x)
{
long long tot=0;
for(long long i=1;i<=x;i*=10)//*=10重要!
{
tot++;
}
return tot;
}
long long Cmp(long long x,long long y)
{
for(;;)
{
if(x%10==0)
{
x/=10;
}
if(y%10==0)
{
y/=10;
}
if(x%10!=0&&y%10!=0)
{
if(ws(x)<ws(y))
{
return 1;
}
else
{
if(ws(x)==ws(y))
{
if(y%10==5)
{
return 0;
}
if(x<y||x%10==5)
{
return 1;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
}
}
}
long long findd(long long x,long long y)
{
if(x>y)
{
return 0;
}
if(Cmp(x,res))
{
res=x;
}
if(x%(cs*10)==0)
{
cs*=10;
}
findd(x+cs,y);
return 0;
}
int main()
{
//freopen("price.in","r",stdin);
//freopen("price.out","w",stdout);
cin>>n;
for(int js=1;js<=n;js++)
{
cin>>L>>R;
if(R-L<10)
{
int tmppdd;
tmppdd=pdd(L,R);
if(tmppdd==1)
{
cout<<L<<endl;
continue;
}
}
res=L;
pd=0;
cs=1;
findd(L,R);
cout<<res<<endl;
}
//cout<<0;
}