File tree 1 file changed +62
-0
lines changed
1 file changed +62
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments