• A


     1     #include <iostream>
     2     #include <algorithm>
     3     #include <cstring>
     4     #include <cstdio>
     5     #include <cstdlib>
     6     #include <vector>
     7 
     8     using namespace std;
     9 
    10     #define LL long long
    11     const int MOD = 2520;
    12     LL dp[20][50][2550];
    13     int a[20];
    14     int Hash[2550];
    15 
    16     LL gcd(LL a, LL b)
    17     {
    18         return b?gcd(b,a%b):a;
    19     }
    20 
    21     LL dfs(int pos, int num, int lcm, bool limit)
    22     {
    23         if(-1==pos) return num%lcm == 0;
    24         if(!limit && ~dp[pos][Hash[lcm]][num]) return dp[pos][Hash[lcm]][num];
    25         LL ans = 0;
    26         int end = limit?a[pos]:9;
    27         for(int i=0; i<=end; i++)
    28             ans += dfs(pos-1, (num*10+i)%MOD, i?lcm*i/gcd(lcm,i):lcm, limit&&i==a[pos]);
    29         if(!limit) dp[pos][Hash[lcm]][num] = ans;
    30         return ans;
    31     }
    32 
    33     LL solve(LL n)
    34     {
    35         int pos = 0;
    36         while(n)
    37         {
    38             a[pos++] = n%10;
    39             n /= 10;
    40         }
    41         return dfs(pos-1, 0, 1, 1);
    42     }
    43 
    44     int main()
    45     {
    46         int T;
    47         scanf("%d", &T);
    48         int cnt = 0;
    49         for(int i=1; i<=MOD; i++)
    50             if(MOD%i == 0)
    51                 Hash[i] = cnt++;
    52         memset(dp, -1, sizeof(dp));
    53         while(T--)
    54         {
    55             long long l, r;
    56             scanf("%lld%lld", &l, &r);
    57             printf("%lld
    ", solve(r)-solve(l-1));
    58         }
    59         return 0;
    60     }
  • 相关阅读:
    word count
    第三周作业:Visual Studio 2013
    第三周作业:读程序
    只有动手才能发现问题
    软件工程
    final个人阅读作业
    个人阅读作业7
    第一次个人项目修改
    结对编程项目总结(王开207, 唐彬170)
    个人博客作业3
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/9126079.html
Copyright © 2020-2023  润新知