zoukankan      html  css  js  c++  java
  • Beautiful numbers CodeForces

    #include<string>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <cstdio>
    #include <iostream>
    using namespace std;
    typedef long long ll;
    const int maxn=2550;
    //原数是不是整除非零位,也就是整除最小公倍数,1-9所有最小公倍数为2520
    int a[20],mp[maxn];//1-9任意最小公倍数是48个
    ll d[20][maxn][50];//第几位,取模后为sum,最小公倍数为lcm的个数
    ll n,m;
    void init()
    {
        int ans=0;
        for(int i=1; i<=2520; i++)
            if(2520%i==0)
            {
                mp[i]=ans;
                ans++;
            }
    }
    ll work(ll x,ll y)
    {
        if(x==0||y==0)
            return x+y;
        else
            return x*y/__gcd(x,y);
    }
    ll dfs(int pos,ll sum,int lcm,bool limit)
    {
        if(pos==-1)
        {
            return (sum%lcm)==0;
        }
        if(!limit&&d[pos][sum][mp[lcm]]!=-1)
            return d[pos][sum][mp[lcm]];
        int u=limit?a[pos]:9;
        ll temp=0;
        for(int i=0; i<=u; i++)
        {
            temp+=dfs(pos-1,(sum*10+i)%2520,work(lcm,i),limit&&a[pos]==i);
        }
        if(!limit)
            d[pos][sum][mp[lcm]]=temp;
        return temp;
    }
    ll solve(ll x)
    {
        int pos=0;
        while(x>0)
        {
            a[pos++]=int(x%10);
            x/=10;
        }
        return dfs(pos-1,0,1,true);//必须为1,否则sum%lcm报错
    }
    int main()
    {
        memset(d,-1,sizeof d);
        init();
        int t;
        cin>>t;
        while(t--)
        {
            cin>>n>>m;
            cout<<(solve(m)-solve(n-1))<<endl;
        }
        return 0;
    }
  • 相关阅读:
    BZOJ4569 : [Scoi2016]萌萌哒
    2016浙江省赛过山车记
    BZOJ4546(原) : 三元组
    BZOJ4539 : [Hnoi2016]树
    BZOJ4537 : [Hnoi2016]最小公倍数
    BZOJ4538 : [Hnoi2016]网络
    BZOJ4527 : K-D-Sequence
    BZOJ4504 : K个串
    BZOJ4471 : 随机数生成器Ⅱ
    BZOJ3659 : Which Dreamed It
  • 原文地址:https://www.cnblogs.com/zhangzhenjun/p/12448133.html
Copyright © 2011-2022 走看看