社区讨论

55pts求助awa

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lo1nxwdf
此快照首次捕获于
2023/10/23 00:08
2 年前
此快照最后确认于
2023/11/03 00:50
2 年前
查看原帖
CPP
#include <bits/stdc++.h>

const int MAX_SIZE = 18;

const long long MOD = 1e9 + 7;

int num[MAX_SIZE + 5];
long long f[MAX_SIZE + 5][(MAX_SIZE + 5) * 10];

long long dp(int pos, int sum, bool flag) {
    if (pos == 1) {
        return sum;
    }
    if (flag == false && f[pos][sum] != -1) {
        return f[pos][sum];
    }
    int res = 0, maxNum = flag ? num[pos - 1] : 9;
    for (int i = 0; i <= maxNum; i++) {
        res += dp(pos - 1, sum + i, flag && (i == num[pos - 1]));
        res %= MOD;
    }
    if (flag == false) {
        f[pos][sum] = res;
    }
    return res;
}

long long solve(int x) {
    memset(num, 0, sizeof(num));
    for (int i = 0; i < MAX_SIZE + 5; i++) {
        for (int j = 0; j < (MAX_SIZE + 5) * 10; j++) {
            f[i][j] = -1;
        }
    }
    int len = 0;
    while (x) {
        len++;
        num[len] = x % 10;
        x /= 10;
    }
    return dp(len + 1, 0, true);
}

int main() {
    int t;
    std::cin >> t;
    for (int i = 1; i <= t; i++) {
        int l, r;
        std::cin >> l >> r;
        std::cout << std::abs(solve(r) - solve(l - 1)) % MOD << std::endl;
    }
    return 0;
}

回复

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

正在加载回复...