负数???
查看原帖
负数???
578809
hyc12528楼主2022/12/2 17:21
#include <bits/stdc++.h>
using namespace std;

const int SIZE = 1 << 14;
inline char getc() {
    static char buf[SIZE], *begin = buf, *end = buf;
    if (begin == end) {
        begin = buf;
        end = buf + fread(buf, 1, SIZE, stdin);
    }
    return *begin++;
}

inline int read() {
    register int ret = 0, sgn = 0;
    static char ch = getchar();
    while (!isdigit(ch)) {
        sgn |= ch == '-', ch = getchar();
    }
    while (isdigit(ch)) {
        ret = ret * 10 + ch - '0', ch = getchar();
    }
    return sgn ? -ret : ret;
}

const int mod = 1000000007;

long long f[25] /*位数*/[10] /*数字*/;
int a[25];
long long l, r;

int dfs(int layers, int num, bool flag) {
    if (layers == 0) {
        return num;
    }
    long long cnt = 0;
    if (flag) {
        for (int i = 0; i <= a[layers - 1]; i++) {
            cnt += dfs(layers - 1, i, i == a[layers - 1] ? true : false) % mod;
        }
        cnt += num * (a[layers - 1] + 1) % mod;
    } else {
        if (f[layers][num] >= 0) {
            return f[layers][num] % mod;
        } else {
            for (int i = 0; i <= 9; i++) {
                cnt += dfs(layers - 1, i, flag) % mod;
            }
            cnt += num * (a[layers - 1] + 1) % mod;
            f[layers][num] = cnt % mod;
        }
    }
    return cnt % mod;
}

int main() {
    for (int i = 0; i < 10; i++) {
        f[0][i] = i % mod;
        f[1][i] = 45 + i * 10 % mod;
    }
    int t = read();
    while (t--) {
        l = read(), r = read();
        int n;
        for (n = 0; r; n++) {
            a[n] = r % 10;
            r /= 10;
        }
        long long cnt1 = 0;
        for (int i = 0; i <= a[n - 1]; i++) {
            cnt1 += dfs(n - 1, i, i == a[n - 1] ? true : false) % mod;
        }

        r = l - 1;
        for (n = 0; r; n++) {
            a[n] = r % 10;
            r /= 10;
        }
        long long cnt2 = 0;
        for (int i = 0; i <= a[n - 1]; i++) {
            cnt2 += dfs(n - 1, i, i == a[n - 1] ? true : false) % mod;
        }
        printf("%lld\n", cnt1 - cnt2);
    }
    return 0;
}

输入

70 120

输出

-420
2022/12/2 17:21
加载中...