CF940B的题解
(一)
每次先减到不能除为止。
然后比较是除 \(k\) 花费少,还是 通过不断减 \(1\) 花费少。
当 \(n<k\) 时只用减到 \(1\) 就行了。
特判 \(k=1\)。
(二)
AC 代码。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,a,b,ans;
signed main(){
scanf("%lld%lld%lld%lld",&n,&k,&a,&b);
if(k==1)printf("%lld",(n-1)*a);
else if(n==1)printf("0");
else{
while(n>1){
if(n<k){
ans+=(n-1)*a;
break;
}
int rest=n%k;
ans+=rest*a;
n-=rest;
int nxt=n/k;
ans+=min(b,(n-nxt)*a);
n=nxt;
}
printf("%lld",ans);
}
return 0;
}

浙公网安备 33010602011771号