Submission #5859000


Source Code Expand

#include <iostream>
#include <vector>
#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;

typedef vector<int> vi;
typedef vector<vi>  vvi;

const int MOD = 1000000007;

int main()
{
    int D; cin >> D;
    string N; cin >> N;

    // nth-digit, less, rem
    vector<vvi> dp(N.size()+1, vvi(2, vi(D, 0)));
    dp[0][0][0] = 1;

    rep(n,N.size()) rep(l,2) rep(d,D) {
        if(dp[n][l][d] == 0)
            continue;

        int Mi = l? 10: N[n]-'0'+1;
        rep(i, Mi) {
            if(!l && i == Mi-1) {
                /* limit */
                dp[n+1][0][(d+i)%D] = (dp[n][l][d] + dp[n+1][0][(d+i)%D]) % MOD;
            } else {
                /* not limit */
                dp[n+1][1][(d+i)%D] = (dp[n][l][d] + dp[n+1][1][(d+i)%D]) % MOD;
            }
        }
    }

    cout << dp[N.size()][0][0] + dp[N.size()][1][0] - 1 << endl;

    return 0;
}

Submission Info

Submission Time
Task E - 数
User loupbita
Language C++14 (GCC 5.4.1)
Score 4
Code Size 916 Byte
Status AC
Exec Time 55 ms
Memory 9088 KB

Judge Result

Set Name All
Score / Max Score 4 / 4
Status
AC × 5
Set Name Test Cases
All 00, 01, 02, 90, 91
Case Name Status Exec Time Memory
00 AC 2 ms 384 KB
01 AC 35 ms 5760 KB
02 AC 55 ms 9088 KB
90 AC 1 ms 256 KB
91 AC 1 ms 256 KB