Submission #49396553
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/modint>
namespace {
using ModInt [[maybe_unused]] = atcoder::modint998244353;
using Num [[maybe_unused]] = long long int;
using Vec [[maybe_unused]] = std::vector<Num>;
using Set [[maybe_unused]] = std::set<Num>;
using Mset [[maybe_unused]] = std::multiset<Num>;
using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;
template<typename T>
using Q [[maybe_unused]] = std::queue<T>;
template<typename T>
using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;
}
const Num n_digits = 15;
const Num max_sum = 9*14;
Num dp[n_digits+1][max_sum+2][max_sum+2][2];
void solve(std::istream& is, std::ostream& os) {
std::string s;
is >> s;
Num answer {0};
for(Num total{1}; total<=max_sum; ++total) {
const auto len = s.size();
std::vector dp(len + 1, std::vector(total + 1, std::vector(total + 1, std::vector(2, 0LL))));
dp.at(0).at(0).at(0).at(1) = 1;
for(size_t index{0}; index<len; ++index) {
const auto digit = s.at(index) - '0';
for(Num sum{0}; sum<=max_sum; ++sum) {
for(Num rem{0}; rem<total; ++rem) {
for(Num gt{0}; gt<2; ++gt) {
for(Num t{0}; t<10; ++t) {
const auto new_sum = sum + t;
if (new_sum > total) {
continue;
}
if (gt & (digit < t)) {
continue;
}
const Num new_rem = (rem * 10 + t) % total;
const Num new_gt = gt && (digit == t);
dp[index+1][new_sum][new_rem][new_gt] += dp[index][sum][rem][gt];
}
}
}
}
}
answer += dp[len][total][0][0] + dp[len][total][0][1];
}
os << answer << "\n";
}
int main(void) {
solve(std::cin, std::cout);
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - Digit Sum Divisible |
| User | zettsut |
| Language | C++ 20 (gcc 12.2) |
| Score | 525 |
| Code Size | 2174 Byte |
| Status | AC |
| Exec Time | 925 ms |
| Memory | 18772 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 525 / 525 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| 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 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 136 ms | 7244 KiB |
| 00_sample_01.txt | AC | 241 ms | 9024 KiB |
| 00_sample_02.txt | AC | 588 ms | 14292 KiB |
| 01_random_00.txt | AC | 800 ms | 17880 KiB |
| 01_random_01.txt | AC | 849 ms | 17788 KiB |
| 02_max_00.txt | AC | 758 ms | 18772 KiB |
| 02_max_01.txt | AC | 925 ms | 17888 KiB |
| 03_min_00.txt | AC | 87 ms | 6356 KiB |
| 04_corner_00.txt | AC | 602 ms | 13400 KiB |