Skip to content

Commit a4a21c5

Browse files
committed
atcoder/abc192D
1 parent d39f027 commit a4a21c5

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

atcoder/abc192/D/main.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
using ll = int64_t;
5+
using ff = long double;
6+
7+
string X;
8+
ll M;
9+
10+
bool pass(ll n) {
11+
if (n == 0) return true;
12+
ll v = 0;
13+
for (int i = 0; i < X.size(); ++i) {
14+
int x = X[i] - '0';
15+
if (v > M / n) return false;
16+
v *= n;
17+
if (v > M - x) return false;
18+
v += x;
19+
}
20+
return true;
21+
}
22+
23+
int minbase() {
24+
int n = 0;
25+
for (int i = 0; i < X.size(); ++i) {
26+
n = max(n, X[i] - '0');
27+
}
28+
return n + 1;
29+
}
30+
31+
ll maxbase() {
32+
ll ok = 0, ng = 2e18;
33+
while (abs(ok - ng) > 1) {
34+
auto m = (ok + ng) / 2;
35+
if (pass(m)) {
36+
ok = m;
37+
} else {
38+
ng = m;
39+
}
40+
}
41+
return ok;
42+
}
43+
44+
ll solve() {
45+
if (X.size() == 1) {
46+
return (X[0]-'0' <= M) ? 1 : 0;
47+
}
48+
ll mini = minbase();
49+
ll maxi = maxbase();
50+
if (maxi < mini) return 0;
51+
return maxi - mini + 1;
52+
}
53+
54+
int main() {
55+
ios_base::sync_with_stdio(false);
56+
cin.tie(0); cout.tie(0);
57+
58+
cin >> X >> M;
59+
cout << solve() << endl;
60+
61+
return 0;
62+
}

0 commit comments

Comments
 (0)