Right now she actually isn't. But she will be, if you don't solve this problem.
You are given integers n, k, A and B. There is a number x, which is initially equal to n. You are allowed to perform two types of operations:
- Subtract 1 from x. This operation costs you A coins.
- Divide x by k. Can be performed only if x is divisible by k. This operation costs you B coins.
The first line contains a single integer n (1 ≤ n ≤ 2·109).
The second line contains a single integer k (1 ≤ k ≤ 2·109).
The third line contains a single integer A (1 ≤ A ≤ 2·109).
The fourth line contains a single integer B (1 ≤ B ≤ 2·109).
Output a single integer — the minimum amount of coins you have to pay to make x equal to 1.
9
2
3
1
6
5
5
2
20
8
19
3
4
2
12
Note
In the first testcase, the optimal strategy is as follows:
Subtract 1 from x ( 9 → 8) paying 3 coins. Divide x by 2 ( 8 → 4) paying 1 coin. Divide x by 2 ( 4 → 2) paying 1 coin. Divide x by 2 ( 2 → 1) paying 1 coin.
The total cost is 6 coins.
In the second test case the optimal strategy is to subtract 1 from x 4 times paying 8 coins in total.
int main(){
long long n,k,a,b;
long long cost;
scanf("%lld%lld%lld%lld",&n,&k,&a,&b);
cost=0;
if(k==1){ //排除死循环
cost=a*(n-1);
n=1;
}
while(n!=1){
if(n%k==0){ //当n%k==0时取最优解,使花费最小
if((n-n/k)*a>b){
cost+=b;
}else cost+=(n-n/k)*a;
n/=k;
}else if(n>k){
cost+=n%k*a;
n-=n%k;
}else{
cost+=(n-1)*a;
n=1;
}
}
printf("%lld\n",cost);
}