Problem:
Score : 500 points

Problem Statement

Find the number of integers between 1 and N (inclusive) that contains exactly K non-zero digits when written in base ten.

Constraints

1 \leq N < 10^{100}

1 \leq K \leq 3

Input

Input is given from Standard Input in the following format:

N
K

Output

Print the count.

Sample Input 1

100
1

Sample Output 1

19

The following 19 integers satisfy the condition:

1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100

Sample Input 2

25
2

Sample Output 2

14

The following 14 integers satisfy the condition:

11,12,13,14,15,16,17,18,19,21,22,23,24,25

Sample Input 3

314159
2

Sample Output 3

937

Sample Input 4

9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
3

Sample Output 4

117879300

Solution in Kotlin (1.0.0) (judge verdict: Accepted)

fun main(arg: Array<String>) {
    val N = next()
    val K = nextInt()
    val L = N.length
    val dp = Array(101) { Array(4) { IntArray(2) } }
    dp[0][0][0] = 1
    for (i in 0 until L)
        for (j in 0 until 4)
            for (k in 0 until 2) {
                val nd = N[i] - '0'
                for (d in 0 until 10) {
                    var ni = i + 1
                    var nj = j
                    var nk = k
                    if (d != 0) nj += 1
                    if (nj > K) continue
                    if (k == 0) {
                        if (d > nd) continue
                        if (d < nd) nk = 1
                    }
                    dp[ni][nj][nk] += dp[i][j][k]
                }
            }
    var ans = dp[L][K][0] + dp[L][K][1]
    println(ans)
}
fun next() = readLine()!!
fun nextInt() = Integer.parseInt(next())