题目
原题链接:B. Our Tanya is Crying Out Loud
题意
给出n,k,a,b四个数,每次可执行两种操作:
1.n-=1,每次消耗a;
2.n/=k,每次消耗b.
问最少的消耗使n等于1。
每次比较减和除哪个便宜,若不能除则减到能除为止。
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
__int64 n,k,a,b,ans=0;
cin>>n>>k>>a>>b;
if(n<k || k==1) {
cout<<(n-1)*a;
} else {
while(n>=k) {
if(n%k==0) {
if(b > a*(n-(n/k)) ) {
ans+=a*(n-(n/k));
n=(n/k);
}else{
n/=k;
ans+=b;
}
} else {
ans+=(n-(n/k)*k)*a;
n=(n/k)*k;
}
}
ans+=(n-1)*a;
cout<<ans;
}
return 0;
}
网友评论