Submission #5902709


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define REP(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i)
#define RREP(i,a,n) for(int i=(a), i##_len=(n); i<i##_len; ++i)

const ll MAX = 1e9+7;

ll dp[10001][2][101];
int D;
string N;

ll solve(int k, int big, int sum) {
  if (k == N.size()) return sum == 0;
  if (dp[k][big][sum] != -1) return dp[k][big][sum];

  ll ret = 0;
  int c = N[k] - '0';
  REP(i, big ? 10 : c+1) {
    int b = big == 1 || i < c;
    ret += solve(k+1, b, (sum+i)%D);
    ret %= MAX;
  }
  return dp[k][big][sum] = ret;
}

int main(int argc, char *argv[]) {
  cin >> D;
  cin >> N;
  if (D==1) {
    cout << N << endl;
    return 0;
  }
  fill_n(&dp[0][0][0], 10001*2*101, -1);
  solve(0, 0, 0);
  cout << dp[0][0][0] - 1<< endl;
  return 0;
}

Submission Info

Submission Time
Task E - 数
User vintersnow
Language C++14 (GCC 5.4.1)
Score 4
Code Size 828 Byte
Status AC
Exec Time 96 ms
Memory 17024 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 7 ms 16000 KB
01 AC 61 ms 17024 KB
02 AC 96 ms 17024 KB
90 AC 6 ms 16000 KB
91 AC 6 ms 16000 KB