I really want to know how to solve this problem :
You are given two positive integers d and s. Find minimal positive integer n which is divisible by d and has sum of digits equal to s.
# | User | Rating |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | awoo | 154 |
8 | Dominater069 | 154 |
10 | luogu_official | 150 |
I really want to know how to solve this problem :
You are given two positive integers d and s. Find minimal positive integer n which is divisible by d and has sum of digits equal to s.
Name |
---|
The constraints are really important here, they are relatively small and may encourage some exploration techniques.
You can brute force every possible digit. Of course, this will lead to TLE unless you do some prunning.
Is it useful to insert a digit if it leads to the same sum and same value (mod d)?
You can solve it with BFS. Every node (or state) has two values, (number mod d, sum of digits)
Neighboring nodes are those possible values that can be obtained after inserting a digit to the right.
The target node is $$$(0, s)$$$. If this node is reachable, reconstruct the path and print answer. Otherwise, there is no number that satisfies both requirements.
I'd like to add an observation to the hint you gave:
"Is it useful to insert a digit if it leads to the same sum and same value (mod d)?" This can only happen is '0' is chosen. However, choosing '0' may not immediately lead to the same sum and same value (mod d), but it will eventually enter a cycle.
Therefore, the more general observation is that choosing '0' will always lead to a cycle, thus a straightforward dynamic programming solution won't work.