社区讨论

95pts Wa #18 MnZn求助QAQ

P4999烦人的数学作业参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo14g6ds
此快照首次捕获于
2023/10/22 15:02
2 年前
此快照最后确认于
2023/11/02 14:34
2 年前
查看原帖
CPP
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>

typedef long long valueType;
const valueType mod = 1e9 + 7;

int number[20];
valueType dp[20], power[20];
valueType record[20];

valueType Dfs(int pos, bool limit) {
    if (pos == 0)
        return 0;

    if (limit == false && dp[pos])
        return dp[pos];

    valueType result = 0;
    int biggest = (limit == true) ? number[pos] : 9;
    
    for (int i = 0; i <= biggest; ++ i) {
        if (limit && i == biggest) 
            result = (result + i * (record[pos] + 1) % mod) % mod;
        else 
            result = (result + i * power[pos - 1] % mod) % mod;

        result = (result + Dfs(pos - 1, (limit && (i == biggest)))) % mod;
    }

    if (!limit)
        dp[pos] = result;

    return result;
}

valueType Work(valueType ask) {
    if (ask <= 0) 
        return 0;

    memset(number, 0, sizeof(number));
    memset(record, 0, sizeof(record));

    int len = 1;

    while (ask) {
        if (ask % 10) 
            number[len] = ask % 10;
        
        record[len + 1] = (record[len] % mod + number[len] * power[len - 1] % mod) % mod;
        
        len ++;
        ask /= 10;
    }

    // std::reverse(number + 1, number + 1 + len - 1);

    // for (int i = len - 1; i >= 1; -- i) {
    //     std::cout << record[i] << " ";
    // }
    // std::cout << std::endl;

    return Dfs(len - 1, true);
}

int T;

void Pretreatment() {
    power[0] = 1;

    for (int i = 1; i <= 18; ++ i)
        power[i] = power[i - 1] * 10 % mod;
}

int main() {
    Pretreatment();

    scanf("%d", &T);

    while (T --) {
        valueType L, R;

        scanf("%lld%lld", &L, &R);

        printf("%lld\n", (Work(R) - Work(L - 1) + mod) % mod);

        // std::cin >> L;

        // std::cout << Work(L) << std::endl;
    }

    return 0;
}
/*
1 
91 109
*/

回复

2 条回复,欢迎继续交流。

正在加载回复...