Submission #1797135


Source Code Expand

#include <cstdio>
#include <algorithm>
using namespace std;
#define MOD 1000000007
#define MAX_len 10001
#define MAX_D 100
#define modp(x,y) (((y) + (x) % (y)) % (y))

int main(int argc, const char * argv[]) {
    // dp[i][p] : Nの先頭からi文字目までのi桁の整数以下で, 各桁の総和がp(mod D)となる非負整数の個数(mod MOD)
    long long dp[MAX_len][MAX_D];
    // c[i] : Nの先頭からi文字目までの各桁の総和(mod D)
    int c[MAX_len];
    
    int D;
    scanf("%d", &D);
    char * N_ = new char[1];
    scanf("%100s", N_);
    
    int N[MAX_len];
    int len = 0;
    for (int i = 0; i < MAX_len; i++) {
        if (N_[i] == '\0') {
            len = i;
            break;
        }
        N[i] = int(N_[i]) - int('0');
    }
    
    for (int i = 0; i < len; i++) {
        if (i == 0) c[i] = N[i] % D;
        else c[i] = modp(c[i-1] + N[i], D);
    }
    
    for (int i = 0; i < len; i++) {
        for (int p = 0; p < D; p++) {
            if (i == 0) {
                for (int n = 0; n < N[i]+1; n++) {
                    if (modp(n, D) == p) dp[i][p] = modp(dp[i][p] + 1, MOD);
                }
            } else {
                long long sum = 0;
                for (int n = 0; n < 10; n++) {
                    sum = modp(sum + dp[i-1][modp((p-n),D)], MOD);
                }
                for (int n = N[i] + 1; n < 10; n++) {
                    if (modp(c[i-1] + n, D) == p) sum = modp(sum - 1, MOD);
                }
                dp[i][p] = sum;
            }
        }
    }
    
    
    printf("%lld\n", modp(dp[len-1][0] - 1, MOD));
    return 0;
}

Submission Info

Submission Time
Task E - 数
User habara_k
Language C++14 (GCC 5.4.1)
Score 0
Code Size 1683 Byte
Status WA
Exec Time 3 ms
Memory 2304 KB

Compile Error

./Main.cpp: In function ‘int main(int, const char**)’:
./Main.cpp:16:20: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &D);
                    ^
./Main.cpp:18:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%100s", N_);
                       ^

Judge Result

Set Name All
Score / Max Score 0 / 4
Status
AC × 3
WA × 2
Set Name Test Cases
All 00, 01, 02, 90, 91
Case Name Status Exec Time Memory
00 AC 3 ms 384 KB
01 WA 2 ms 384 KB
02 WA 3 ms 2304 KB
90 AC 1 ms 256 KB
91 AC 1 ms 256 KB