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 PyPy3 (7.3.0) (judge verdict: Wrong Answer)

import math
n=int(input())
k=int(input())
a=math.log10(n)
if k==1:
    print(int((a//1)*9+n//(10**(a//1))))
elif k==2:
    if 1<=n<=10:
        print(0)
    else:
        b=a//1
        c=int(81*(1/2)*b*(b-1))
        if n%10**b==0:
            print(c)
        else:
            d=math.log10(n%10**b)
            print(int(c+9*b*(n//10**b-1)+(d//1)*9+(n%10**b)//(10**(d//1))))
else:
    if 1<=n<=110:
        print(0)
    else:
        sumnum=0
        b=int(a//1)
        num=0
        for i in range(2,b):
            num+=math.factorial(i)//(2*math.factorial(i-2))
        sumnum+=num*729
        sumnum+=int((n//10**b-1)*81*(1/2)*b*(b-1))
        if 0<=n%10**b<=10:
            print(int(sumnum))
        else:
            d=math.log10(n%10**b)
            e=d//1
            sumnum+=int(81*(1/2)*e*(e-1))
            if n%10**b%10**e==0:
                print(sumnum)
            else:
                f=math.log10((n%10**b)%10**e)
                print(int(sumnum+9*e*(n%10**b//10**e-1)+(f//1)*9+(n%10**b%10**e)//(10**(f//1))))