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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
# define rep(i,n) for(int i=0;i<(n);i++)
typedef long long ll;

ll ctoll(char a){
    return (ll)a-'0';
}

ll calcC(ll a,ll b){
    ll r = 1;
    rep(i,b){
        r*=(a-i);
    }
    rep(i,b){
        r/=(i+1);
    }
    return r;
}


int main(){
	cin.tie(0);
   	ios::sync_with_stdio(false);
	
	string S;
	cin>>S;
    ll K;
    cin>>K;
	ll l = S.length();
    if(l<K){
        cout<<0<<"\n";
        return 0;
    }
    ll pow9[4] = {1,9,9*9,9*9*9};
    ll ans = 0;
    
    if(l>K){
        ans += calcC(l-1,K)*pow9[K];
    }
    ll max_n = ctoll(S[0]);
    if(K==1){
        ans += max_n;
    }else{
        ll second_n = ctoll(S[1]);
        if(K==2){
            ans += (max_n-1)*(l-1)*9+second_n+(l-2)*9;
        }else{
            ll third_n = ctoll(S[2]);
            ans +=(max_n-1)*calcC(l-1,2)*pow9[2] + calcC(l-2,2)*pow9[2] + (second_n-1)*(l-2)*9 + third_n + (l-3)*9;
        }
    }
    cout<<ans<<"\n";

	
	return 0;
}