欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

幸运数字Ⅱ(树型结构构造答案,打表)难度⭐⭐

程序员文章站 2022-04-27 11:35:44
...

幸运数字Ⅱ
幸运数字Ⅱ(树型结构构造答案,打表)难度⭐⭐
打表即可,观察数据,是一组简单的二叉树的树形结构,所以引申出这一类的题,比如题目为1,2,3,这三个数,那么就是一个三叉树

                0  
          4                 7  
    44       47        74       77  
444  447  474  477  744  747  774  777

然后就可以以很短的代码和复杂度打表求解即可

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<math.h>
#include<vector>
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r)/2
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
//#define int __int128
using namespace std;
typedef long long ll;//全用ll可能会MLE或者直接WA,试着改成int看会不会A
const ll N=100000;
const ll INF=1e9+9;
const ll mod=2147483647;
const double EPS=1e-10;//-10次方约等于趋近为0
const double Pi=3.1415926535897;

template<typename T>void read(T &x)
{
    x=0;char ch=getchar();ll f=1;
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}x*=f;
}

ll ans,a[N],l,r;

int main()
{
    scanf("%lld%lld",&l,&r);
    over(i,1,1024)
    {
        ll t=i/2+1;ll p=i%2?4:7;
        a[i]=10*a[i-t]+p;
    }
    over(i,0,1024)
    {
        if(a[i]>=l)
        {
            for(;l<=a[i];++l)
            {
                ans+=a[i];
                if(l==r)break;
            }
            if(l==r)break;
        }
    }
    printf("%lld\n",ans);
    return 0;
}

注:如果您通过本文,有(qi)用(guai)的知识增加了,请您点个赞再离开,如果不嫌弃的话,点个关注再走吧,日更博主每天在线答疑 ! 当然,也非常欢迎您能在讨论区指出此文的不足处,作者会及时对文章加以修正 !如果有任何问题,欢迎评论,非常乐意为您解答!( •̀ ω •́ )✧

相关标签: 【构造】