80pts
P1874
#include <iostream>
#include <cmath>
using namespace std;
#define int __int128
void read (int &n) {
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = x * 10 + (ch ^ 48);
ch = getchar();
}
n = x * f;
}
void print (int n) {
if (n < 0) {
putchar('-');
n *= -1;
}
if (n > 9)
print(n / 10);
putchar(n % 10 + '0');
}
const int N = 50 + 5, M = 1e5 + 30;
int num[N];
int Q (int L, int r) {
return (signed)num[r] - (signed)num[L - 1] * pow(10ull, (unsigned long long)(r - L + 1));
}
unsigned long long dp[N][M];
signed main () {
string s;
unsigned long long n;
cin >> s >> n;
s = " " + s;
int L = s.size();
string _s = " ";
for (int i = 1; i < L; i ++) {
if (s[i] != '0')
_s = _s + s[i];
}
s = _s;
L = s.size();
for (int i = 1; i < L; i ++)
num[i] = num[i - 1] * 10 + (s[i] ^ 48);
for (int i = 0; i <= L + 1; i ++)
for (int j = 0; j <= n + 1; j ++)
dp[i][j] = 0x3f3f3f3full * 0x3f3f3f3f;
dp[0][0] = 0;
for (int i = 1; i < L; i ++)
for (int k = 1; k < 12; k ++)
if (i >= k)
for (int j = Q(i - k + 1, i); j <= n; j ++)
dp[i][j] = min(dp[i][j], dp[i - k][j - Q(i - k + 1, i)] + 1);
if (dp[L - 1][n] > (L - 1))
cout << -1;
else
cout << dp[L - 1][n] - 1;
return 0;
}