每日打卡(2/2)
传送门:点击打开链接
题目大意:将一个数n转化成1,可以有两种操作:
(1)n减去1,这需要花费a;
(2)n/k,当且仅当(n%k==0)可以实行,这需要花费b
请问:将n变为1,最少需要花费多少?
思路:
对于一个数x,如果可以整除k,那么需要比较一下(n-1)*a和b的大小,哪个小用哪个;
如果不能整除k,就比较一下到下面一个能整除k的数需要花费的值。
附代码:
#include<bits/stdc++.h>
using namespace std;
long long n,k,a,b,ans;
int main()
{
cin>>n>>k>>a>>b;
if(k==1) {
cout<<a*(n-1)<<endl;
return 0;
}
while(n>1)
{
int f = 0;
if(n%k==0) f = 1;
if(f) {
ans += min(b,a*(n-n/k));
n = n/k;
}
else if(!f) {
long long t = n/k;
long long temp=n-t*k;
if(t==0)
ans += a*(temp-1);
else
ans += a*temp;
n -= temp;
}
}
cout<<ans<<endl;
return 0;
}