CF940B的題解

Jerry_heng發表於2024-03-28

(一)

每次先減到不能除為止。

然後比較是除 \(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;
}