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 Python (3.4.3) (judge verdict: Wrong Answer)

import itertools as it
import math

N=input()
K=int(input())

keta = len(N)

ans = 0
num = "9" *K
def perm(n,k):
    return math.factorial(n)//math.factorial(n-k)

ans=0
if keta > K:
    ans += (9**K) * perm(keta-1, K)//math.factorial(K)
#print(ans)

if K>keta:
    ans = 0
elif K==1:
    ans += int(N[0])
elif K==2:
    ans += (int(N[0])-1) * 9 * (keta-1)#あたまが1小さい
    ans += int(N[1])#頭が同じ
    if keta >= 3:
        ans += 9 * (keta-2)
else:
    ans += (int(N[0]) - 1)*(9**2)*perm(keta-1, 2)//2 ##頭が1小さい
    ##頭が同じ
    if keta-2 >= 2:
        ans += 9**2 * perm(keta-2, 2)//2
    if int(N[1])>0:#上2桁目-1
        ans += (int(N[1])-1)*9*(keta-2)
    #上2桁目まで同じ
    if keta-3>0:
        ans += 9*(keta-3)
    #上3桁目まで同じ
    ans += int(N[2])

# if K==1:
#     ans += int(N[0])
# elif K==2:
#     ans += int(N[0:2])
#     for i in range(keta-2):
#         ans += int(N[0]) * 9 
# else:
#     ans += int(N[0:3])
#     ans += int(N[0]) * 99 * perm(keta-2, 2)

print(ans)