E 幸运数字Ⅱ

https://ac.nowcoder.com/acm/contest/5086/E

思路:幸运数字在1e9的范围内,数量也就2000多个。

   于是我们可以dfs求出所有幸运数字,然后遍历即可

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll base[3000]; int num;
 5 int tmp[15];
 6 void dfs(int limit,int step,int val)
 7 {
 8     tmp[step]=val;
 9     if(step==limit){
10         num++;
11         ll res=0;
12         for(int i=1;i<=limit;i++){
13             res=res*10+tmp[i];
14         }
15         base[num]=res;
16         return;
17     }
18     dfs(limit,step+1,4);
19     dfs(limit,step+1,7);
20 }
21 void init()
22 {
23     for(int i=1;i<=10;i++){
24         dfs(i,0,0);
25     }
26 }
27 int main()
28 {
29     init();
30 //    printf("num:%d\n",num);
31 //    for(int i=1;i<=100;i++)
32 //        printf("%d\n",base[i]);
33     ll L,R;
34     scanf("%lld%lld",&L,&R);
35     ll ans=0;
36     for(int i=1;i<=num;i++){
37         if(L>R) break;
38         if(base[i]>=L){
39             if(base[i]<=R){
40                 ans=ans+(base[i]-L+1)*base[i];
41                 L=base[i]+1;
42             }
43             else{
44                 ans=ans+(R-L+1)*base[i];
45                 L=R+1;
46             }
47         }
48     }
49     printf("%lld\n",ans);
50     return 0;
51 }
View Code

 

posted @ 2020-05-12 15:57  古比  阅读(186)  评论(0编辑  收藏  举报