提出 #50024037
ソースコード 拡げる
Copy
#include <stdio.h>#include <inttypes.h>char N[32];int mod;int memo_mod[32][2][10 * 32][10 * 32];uint64_t memo[32][2][10 * 32][10 * 32];uint64_t calc(int pos, int sati, int sum_mod, int digit_sum) {uint64_t ans = 0;int limit, i;if (N[pos] == '\0') return sum_mod == 0 && digit_sum == mod;if (digit_sum > mod) return 0;if (memo_mod[pos][sati][sum_mod][digit_sum] == mod) {return memo[pos][sati][sum_mod][digit_sum];}limit = sati ? N[pos] - '0' : 9;for (i = 0; i <= limit; i++) {ans += calc(pos + 1, sati && i == limit, (sum_mod * 10 + i) % mod, digit_sum + i);}
#include <stdio.h>
#include <inttypes.h>
char N[32];
int mod;
int memo_mod[32][2][10 * 32][10 * 32];
uint64_t memo[32][2][10 * 32][10 * 32];
uint64_t calc(int pos, int sati, int sum_mod, int digit_sum) {
uint64_t ans = 0;
int limit, i;
if (N[pos] == '\0') return sum_mod == 0 && digit_sum == mod;
if (digit_sum > mod) return 0;
if (memo_mod[pos][sati][sum_mod][digit_sum] == mod) {
return memo[pos][sati][sum_mod][digit_sum];
}
limit = sati ? N[pos] - '0' : 9;
for (i = 0; i <= limit; i++) {
ans += calc(pos + 1, sati && i == limit, (sum_mod * 10 + i) % mod, digit_sum + i);
}
memo[pos][sati][sum_mod][digit_sum] = ans;
memo_mod[pos][sati][sum_mod][digit_sum] = mod;
return ans;
}
int main(void) {
int i;
int max = 0;
uint64_t ans = 0;
if (scanf("%31s", N) != 1) return 1;
for (i = 0; N[i] != '\0'; i++) max += 9;
for (i = 1; i <= max; i++) {
mod = i;
ans += calc(0, 1, 0, 0);
}
printf("%" PRIu64 "\n", ans);
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - Digit Sum Divisible |
| ユーザ | mikecat |
| 言語 | C (gcc 12.2.0) |
| 得点 | 525 |
| コード長 | 993 Byte |
| 結果 | AC |
| 実行時間 | 224 ms |
| メモリ | 10884 KB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 525 / 525 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 02_max_00.txt, 02_max_01.txt, 03_min_00.txt, 04_corner_00.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 1752 KB |
| 00_sample_01.txt | AC | 1 ms | 1980 KB |
| 00_sample_02.txt | AC | 44 ms | 5924 KB |
| 01_random_00.txt | AC | 187 ms | 10412 KB |
| 01_random_01.txt | AC | 174 ms | 9864 KB |
| 02_max_00.txt | AC | 224 ms | 10884 KB |
| 02_max_01.txt | AC | 190 ms | 9792 KB |
| 03_min_00.txt | AC | 0 ms | 1732 KB |
| 04_corner_00.txt | AC | 27 ms | 4916 KB |