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;
}
posted @ 2024-03-28 08:18  Jerry_heng  阅读(8)  评论(0)    收藏  举报