• 洛谷 P4999 烦人的数学作业


    题目传送门

    数位dp,没啥好说的

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define mod 1000000007
    
    using namespace std;
    
    int t,s[20],len;
    long long l,r,ans,ans1,f[20][2][15];
    
    inline void fenjie(long long x) {
        len = 0;
        while(x) {
            s[++len] = x % 10;
            x /= 10;
        }
    }
    
    inline long long dfs(int d,int sum,bool li,int p) {
        if(d == 0) return sum % mod;
        if(f[d][li][p] != -1) return f[d][li][p];
        long long ss = 0;
        int res = li ? s[d] : 9;
        for(int i = 0;i <= res; i++)
            ss = (ss + dfs(d - 1,sum + (i == p),li && (i == res),p) % mod) % mod;
        f[d][li][p] = ss % mod;
        return ss % mod;
    }
    
    inline void chushihua() {
        ans = ans1 = 0;
        len = 0;
        memset(f,-1,sizeof(f));
        memset(s,0,sizeof(s));
    }
    
    int main() {
        scanf("%d",&t);
        while(t--) {
            scanf("%lld%lld",&l,&r);
            chushihua();
            fenjie(l - 1);
            for(int i = 1;i <= 9; i++) {
                memset(f,-1,sizeof(f));
                ans = (ans + (dfs(len,0,1,i) % mod * i) % mod) % mod;
            }
            fenjie(r);
            for(int i = 1;i <= 9; i++) {
                memset(f,-1,sizeof(f));
                ans1 = (ans1 + (dfs(len,0,1,i) % mod * i) % mod) % mod;
            }
            printf("%d
    ",(ans1 - ans + mod) % mod);
        }
        return 0;
    }
  • 相关阅读:
    LightOJ 1300 边双联通分量+交错路染色
    HDU 6143 快速幂,组合数
    windows 下fc工具
    HDU 6136 模拟
    HDU 6129 暴力,规律
    UVA Live 7770 模拟
    1096: [ZJOI2007]仓库建设
    1191: [HNOI2006]超级英雄Hero
    3224: Tyvj 1728 普通平衡树
    1208: [HNOI2004]宠物收养所
  • 原文地址:https://www.cnblogs.com/lipeiyi520/p/13604982.html
Copyright © 2020-2023  润新知