题目描述
Aya 在工地上搬砖。她手上有 n 块砖头,需要将其平分为两份运达不同的终点。注意,砖头不能切割成半块。
Aya 可以选择一块一块的搬砖,此时搬一块砖需要 a 的体力。Aya 也可以选择将砖头搬上一个可以容纳 k 块砖头的推车(车可以不装满),再推动推车到达终点,这整个过程需要 b 的体力。Aya 可以自由选择搬砖的方式。例如说她可以一块一块地搬一些砖之后再用推车进行搬砖。
Aya 想要知道,在这个过程中,耗费体力的最小值是多少?
输入格式
输入 4 个正整数 n,a,k,b,含义如题所述。
输出格式
输出一行一个整数,表示耗费体力的最小值是多少。如果无法将这些砖头平分成两份,则输出 −1。
输入输出样例 #1
输入 #1
12 3 2 2
输出 #1
12
输入输出样例 #2
输入 #2
15 3 2 2
输出 #2
-1
说明/提示【样例解释】
对于样例 11,将砖平分为两份,则每份一共有 66 块砖。用小推车一次可以搬 22 块砖,只耗费 22 的体力,比一块一块搬砖划算。因此 Aya 选择用三次小推车搬砖,耗费 66 的体力。注意一共有两份砖头,因此一共是耗费 1212 的体力。
【数据范围】
对于所有数据,1≤n,a,k,b≤10 6。请注意数据范围。
//正确代码
#include <iostream>
using namespace std;
int main(){
long long n,a,k,b;
cin>>n>>a>>k>>b;
if(n%2!=0){
cout<<-1;
return 0;
}
n /= 2;
if(n%k==0){
long long p = n*a*2;
long long p1 = n/k*b*2;
cout<<min(p,p1);
}else{
long long p = (n/k*b+n%k*a)*2;
long long p1 = (n/k+1)*b*2;
long long p2 = n*a*2;
cout<<min(p,min(p1,p2));
}
return 0;
}