0pts 求助(我用了二分)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
string sn,sm;
ll n[11451],m[11451],check_use_ans[114514],ln,lm;
int calc(ll x){
ll bb = x,cn = 0;
while (bb) {
cn ++;
bb /= 10;
}
return cn;
}
bool cmp(ll la,ll lb){
if (la != lb) return la > lb;
for (int i = la;i >= 1;i --){
if (n[i] != check_use_ans[i]) return n[i] > check_use_ans[i];
}
return 1;
}
bool check(ll mid){
for (int i = 1;i <= lm;i ++){
check_use_ans[i] = m[i] * mid;
}
int las = calc(mid) + lm + 3;
for (int i = 1;i <= las;i ++){
if (check_use_ans[i] > 9) {
check_use_ans[i + 1] += check_use_ans[i] / 10;
check_use_ans[i] %= 10;
}
}
while (check_use_ans[las] == 0 && las > 1) las --;
return cmp(ln,las);
}
int main(){
cin >> sn >> sm;
ln = sn.size(),lm = sm.size();
for (int i = 1;i <= ln;i ++){
n[i] = sn[ln - i] - '0';
}
for (int i = 1;i <= lm;i ++){
m[i] = sm[lm - i] - '0';
}
ll l = 1,r = 11451419198101145,mid,ret;
while (l <= r){
mid = (l + r) >> 1;
if (check(mid)) ret = mid,l = mid + 1;
else r = mid - 1;
}
cout << ret << endl;
return 0;
}