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 |
|
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 |