链接 :
https://codeforces.com/problemset/problem/940/B
思路 :
1 . 如果当前n是k的倍数,可变为n/k , 操作一代价 : x = (n-n/k)*a , 操作二代价 : y = b , 如果 x<=y,那么直接ans += (n-1)*a,输出ans返回即可(后面的n只会更小,x也就会更小) ,否则,继续模拟下去 ;
2 . n不是k的倍数,那么只能够用操作一 : 代价 : (n%k*a),然后n变为n-n%k;
代码
inline void solve(){
cin >> n >> k >> a >> b ;
LL t = n ;
while(t!=1){
if(t%k==0){
x = 1LL * (t - t / k) * a ;
y = b ;
if(x<=y){
ans += 1LL * (t-1) * a ;
break;
}
else ans += y ;
t /= k;
}else{
ans += 1LL * t % k * a ;
t -= t % k ;
}
}
cout << ans << endl ;
}