洛谷 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;
}
posted @ 2018-08-21 17:20  fuyan0101  阅读(186)  评论(0编辑  收藏  举报