CodeFoeces-940B

2018-03-29  本文已影响0人  ss5smi

题目

原题链接: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;
}
上一篇 下一篇

猜你喜欢

热点阅读