洛谷 P4109 [HEOI2015]定价
这是今天的考试题,我来发一波~
看L和R的范围,显然不能一个一个加,这样会有很多重复情况,会超时,只要看该数有多少个后导0,就把L加上10的多少次方。
很容易可以想到价格后面尽可能多0,
在此基础上需要尽量最后一个数字是5。 那么我们可以想到每次更新的时候尽量跳\(10^N\)。
用一重while循环,从L开始往R找,因为题目要输出最小的一个值,还有当ANS为1时,代码会跑的飞快,嘿嘿~
我的代码短,希望能通过审核~
#include <bits/stdc++.h>
using namespace std;
long long l,r,T;
long long mn=999999999999,ans;
int main()
{
freopen("price.in","r",stdin);
freopen("price.out","w",stdout);
cin>>T;
while (T--) {
scanf("%lld%lld",&l,&r);
while (l<=r) {
long long x=l,cnt=0;
while (x%10==0) x/=10,++cnt;
long long y=x,len=0,f=x%10;
while (y) y/=10,++len;
long long p=0;
if (f==5) --p;
p+=2*len;
if (mn>p) mn=p,ans=l;
l+=pow(10,cnt);
}
printf("%lld\n",ans);
mn=999999999999;
}
return 0;
}