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 Ruby (2.3.3) (judge verdict: Accepted)

#exec({'RUBY_THREAD_VM_STACK_SIZE'=>'100000000'},'/usr/bin/ruby', $0) if !ENV['RUBY_THREAD_VM_STACK_SIZE']

def inpf() a=gets.chomp.split(" ").map(&:to_f)end

def inps() a=gets.chomp.split(" ")end

def copy(a) Marshal.load(Marshal.dump(a)) end

def kaijo(n,r = 10**9+7)(n < 2)? 1 : (2..n).inject{|memo,u|memo=(memo*u)%r} end

def na(n,d=0) Array.new(n,d)end

def na2(n,m,d=0) Array.new(n){Array.new(m,d)}end

def na3(n,m,l,d=0) Array.new(n){Array.new(m){Array.new(l,d)}}end

def inp() a=gets.chomp.split(" ").map(&:to_i)end

def r_up(a, b) (a+b-1)/b end

def sum(a) a.inject(:+) end

def big(a,b) return (a>b)? a:b end

def small(a,b) return (a<b)? a:b end

t = gets.chomp.split("").map &:to_i
kk = inp[0]
l = t.size
zerop = na(l)
nonzeros = 0
t.each.with_index do |d,i|
  zerop[i] = nonzeros
  nonzeros += 1 if(d!=0)
end
ans = na(3)
(0...l).each do |i|
  if(zerop[i] == 0)
    ans[0] += t[i]
  else
    ans[0] += 9
  end
end
(0...(l-1)).each do |i|
  ((i+1)...l).each do |j|
    if(zerop[i] == 0)
      if(zerop[j] <= 1)
        ans[1] += big((t[i]-1),0) * 9 + t[j]
      else
        ans[1] += big((t[i]-1), 0) * 9 + 9
      end
    else
      ans[1] += 81
    end
  end
end
(0...(l-2)).each do |i|
  ((i+1)...(l-1)).each do |j|
    ((j+1)...l).each do |k|
      if(zerop[i] != 0)
        ans[2] += 729
      else
        ans[2] += (t[i]-1) * 81
        if(zerop[j] <= 1)

          if(zerop[k]> 2)

            ans[2] += big((t[j]-1),0) * 9 + 9
          else
            ans[2] += big((t[j]-1),0) * 9 + t[k] if (t[j]-1>0)
          end
        else
          ans[2] +=  81
        end
      end
    end
  end
end

p ans[kk-1]