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;

long long p[105];

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	long long k, sum = 0;
	string s;
	cin >> s;
	cin >> k;
	if(k == 1){
		cout << (s[0] - 48) + (s.size() - 1) * 9;
		return 0;
	}
	if(k == 2){
		for(int i = 2; i < s.size(); ++i){
			sum += 9 * 9 * (i - 1);
			sum %= 1000000007;
		}
		sum += (s[0] - 49) * 9 * (s.size() - 1);
		sum %= 1000000007;
		sum += (s[1] - 48);
		sum %= 1000000007;
		if(s.size() > 1) sum += 9 * (s.size() - 2);
		sum %= 1000000007;
		cout << sum;
		return 0;
	}
	if(k == 3){
		p[2] = 1;
		for(int i = 3; i <= 101; ++i) p[i] = p[i - 1] + i - 1;
		for(int i = 3; i < s.size(); ++i){
			sum += 9 * 18 * p[i - 1];
			sum %= 1000000007;
		}
		sum += (s[0] - 49) * 18 * p[s.size() - 1];
		sum %= 1000000007;
		for(int i = 1; i < s.size(); ++i){
		    if(s.size() > i and s[i] - 48 > 0){
			    sum += (s[i] - 49) * 9 * (s.size() - i - 1);
			    sum %= 1000000007;
			    if(s.size() > i + 1){
			    	for(int j = i + 1; j < s.size(); ++j){
			    		if(s.size() > j and s[j] - 48 > 0) sum += (s[j] - 49) * 9 * (s.size() - j - 1);
			    		sum %= 1000000007;
			    		if(s.size() > j + 1) sum += 9 * (s.size() - j - 2);
					}
				}
			    break;
			}
		}
		sum %= 1000000007;
		cout << sum;
		return 0;
	}

	return 0;
}