BZOJ4029 HEOI2015定价

贪心。

每次将最后一个非零位加一判断即可。

一开始想少了,只关心把最后一位变成5了,其实可以都变的。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int T,l,r;
 4 int add(int x)
 5 {
 6     int k=1;
 7     while(x%10==0)k*=10,x/=10;
 8     return k;
 9 }
10 int calc(int x)
11 {
12     int k=0,b=0;
13     int y=x;
14     while(y)y/=10,b++;
15     while(x%10==0)x/=10,k++;
16     if(x%10==5)return (b-k)*2-1;
17     else return (b-k)*2;
18 }
19 int main()
20 {
21 //    freopen("1.out","r",stdin);
22 //    freopen("my.out","w",stdout);
23     scanf("%d",&T);
24     while(T--)
25     {
26         int ans=1e9,pos=0;
27         scanf("%d%d",&l,&r);
28         ans=calc(l);pos=l;
29         while(1)
30         {
31             l+=add(l);
32             if(l>r)break;
33             int tmp=calc(l);
34             if(tmp<ans)
35             {
36                 ans=tmp,pos=l;
37             }
38         }
39         printf("%d\n",pos);
40     }
41     return 0;
42 }

 

posted @ 2018-01-29 10:26  大奕哥&VANE  阅读(168)  评论(0编辑  收藏  举报