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

#include <bits/stdc++.h>
#define REP(i, n) for(int i = 0; i < n; i++)
#define REPR(i, n) for(int i = n; i >= 0; i--)
#define FOR(i, m, n) for(int i = m; i < n; i++)
#define INF 2e9
#define MOD 1000000007
#define ALL(v) v.begin(), v.end()
#define sz(x) int(x.size())
using namespace std;
typedef long long ll;
using P = pair<int,int>;

ll dfs(string S,int K){
  int N = S.size();
  if(K==0){
    return 1;
  }
  if(N==1){
    if(K==1){
      return S.at(0)-'0';
    }else if(K==0){
      return 1;
    }else{
      return 0;
    }
  }
  ll zeroans;
  ll ans;
  if(K==3){
    zeroans=(N-1)*(N-2)*(N-3)*729/6;
    ans=(N-1)*(N-2)*81/2;
  }else if(K==2){
    zeroans=(N-1)*(N-2)*81/2;
    ans=(N-1)*9;
  }else{
    zeroans=(N-1)*9;
    ans=1;
  }
  return zeroans+ans*((S.at(0)-'0')-1)+dfs(S.substr(1),K-1);
}

int main()
{
  string S;
  cin >> S;
  int K;
  cin >> K;
  int N = S.size();

  cout << dfs(S,K) << endl;
}