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 <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <queue>
#include <climits>
#include <utility>
typedef long long ll;
using namespace std;

int main(void){
  string s;
  int k,n,i;
  cin>>s>>k;
  n=s.size();

  if(k==1){
    cout<<9*(n-1)+(s[0]-'0');
  }
  else if(k==2){
    if((n==3)&&stoi(s)<11){
      cout<<0<<endl;
      return 0;
    }

    int sum=0;
    for(i=1;i<=n-2;i++){
      sum+=81*i;
    }
    sum+=(s[0]-'0'-1)*9*i;
    sum+=9*(i-1);
    sum+=(s[1]-'0');

    cout<<sum<<endl;
  }
  else{
    if((n==3)&&stoi(s)<111){
      cout<<0<<endl;
      return 0;
    }

    int sum=0;
    for(i=0;i<n-3;i++){
      sum+=729*(i+2)*(i+1)/2;
    }
    sum+=(s[0]-'0'-1)*81*(i+2)*(i+1)/2;
    sum+=(s[1]-'0'-1)*9*(i+2)*(i+1)/2;
    sum+=(s[2]-'0'-1)*(i+2)*(i+1)/2;
    sum+=(i+2)*(i+1)/2;

    cout<<sum<<endl;
  }

  return 0;
}