30pts数位DP求助

回复帖子

@Social_Zhao 2019-05-24 21:33 回复

WA from #4 to #10

我怎么这么弱啊

#include<bits/stdc++.h>
#define x10(x) q_pow(10,x);
using namespace std;

const int MaxN = 15;
long long f[MaxN][10][10];
long long a,b;

long long q_pow(int a, int b) {
    long long res = 1;
    while(b) {
        if(b & 1) res *= a;
        b >>= 1;
        a *= a;
    }
    return res;
}

void init() {
    for(int i = 0; i <= 9; i++) f[1][i][i] = 1;
    for(int i = 2; i <=12; i++) {
        for(int j = 0; j <= 9; j++) {
            for(int k = 0; k <= 9; k++) {
                for(int l = 0; l <= 9; l++) {
                    f[i][j][l] += f[i-1][k][l];
                }
            }
            f[i][j][j] += x10(i-1);
        }
    }
}

long long solve(int x, int num) {
    long long digit[15];
    long long len = 0, ans = 0;
    memset(digit, 0, sizeof(digit));
    while( x ) { digit[++len] = x % 10; x /= 10; }
    for(int i = 1; i < len; i++) {
        for(int j = 1; j <=9; j++) {
            ans += f[i][j][num];
        }
    }
    for(int i = 1; i < digit[len]; i++) {
        ans += f[len][i][num];
    }
    for(int i = len-1; i >= 1; i--) {
        for(int j = 0; j < digit[i]; j++) {
            ans += f[i][j][num];
        }
        for(int j = len; j > i; j--) {
            if(digit[j] == num) ans += digit[i] * x10(i-1);
        }
    }
    return ans;
}

int main() {
    scanf("%d%d", &a, &b);
    init();
    for(int i = 0; i <= 9; i++) {
        printf("%lld ", solve(b+1, i) - solve(a, i));
    }
    return 0;
}

求大佬帮差错QAQ

@Social_Zhao 2019-05-24 21:48 回复 举报

我输入1 1000000000000(最大数据)都没有负数,可是评测信息显示

wrong answer On line 1 column 1, read -, expected 3. 得分0

???

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。