Submission #15031609


Source Code Expand

#include<bits/stdc++.h>
using namespace std;

// #define TRACE
#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){
    cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
    const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
}
#else
#define trace(...)
#endif

#define LL long long

string s;
int K;
int len;

LL dp[101][2][4];

LL solve(int i, int res, int k) {
	if(i == len - 1) {
		if(k >= 2) {
			return 0;
		}
		else if(k == 1) {
			int maxD = res == 1? s[i]-'0' : 9;
			if(res == 1) {
				if(maxD == 0) {
					return 0;
				} else {
					return maxD;
				}
			} else {
				return 9;
			}
		}
		else {
			return 1;
		}
	}
	if(k == 0) {
		return 1;
	}

	LL &ret = dp[i][res][k];
	if(ret != -1) {
		return ret;
	}
	
	ret = 0;
	int maxD = res == 1? s[i]-'0' : 9;
	for(int d=0;d<=maxD;d++) {
		if(res == 0) {
			if(d == 0) {
				ret = ret + solve(i+1, 0, k);
			} else {
				ret = ret + solve(i+1, 0, k-1);
			}
		} else {
			if(maxD == 0) {
				ret = ret + solve(i+1, 1, k);
			} else {
				if(d == 0) {
					ret = ret + solve(i+1, 0, k);
				}
				else if(d == maxD) {
					ret = ret + solve(i+1, 1, k-1);
				}
				else {
					ret = ret + solve(i+1, 0, k-1);
				}
			}
		}
		// trace(i, res, k, maxD, d, ret);
	}
	return ret;
}

int main() {
	cin >> s >> K;
	len = (int)s.size();

	memset(dp, -1, sizeof(dp));
	LL ans = solve(0, 1, K);
	cout << ans << endl;
	return 0;
}

Submission Info

Submission Time
Task E - Almost Everywhere Zero
User yesnomaybe
Language C++ (GCC 9.2.1)
Score 500
Code Size 1714 Byte
Status AC
Exec Time 8 ms
Memory 3580 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 4
AC × 22
Set Name Test Cases
Sample sample_01, sample_02, sample_03, sample_04
All hand_01, hand_02, hand_03, hand_04, hand_05, max_01, max_02, max_03, max_04, max_05, random_01, random_02, random_03, random_04, random_05, random_06, random_07, random_08, sample_01, sample_02, sample_03, sample_04
Case Name Status Exec Time Memory
hand_01 AC 8 ms 3500 KiB
hand_02 AC 2 ms 3464 KiB
hand_03 AC 2 ms 3400 KiB
hand_04 AC 1 ms 3400 KiB
hand_05 AC 2 ms 3500 KiB
max_01 AC 2 ms 3504 KiB
max_02 AC 2 ms 3576 KiB
max_03 AC 1 ms 3524 KiB
max_04 AC 2 ms 3468 KiB
max_05 AC 2 ms 3524 KiB
random_01 AC 2 ms 3508 KiB
random_02 AC 2 ms 3564 KiB
random_03 AC 2 ms 3564 KiB
random_04 AC 2 ms 3468 KiB
random_05 AC 2 ms 3520 KiB
random_06 AC 2 ms 3580 KiB
random_07 AC 2 ms 3568 KiB
random_08 AC 2 ms 3504 KiB
sample_01 AC 2 ms 3576 KiB
sample_02 AC 2 ms 3520 KiB
sample_03 AC 2 ms 3520 KiB
sample_04 AC 2 ms 3392 KiB