[NICA #3] 搬砖
题目描述
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
提示
【样例解释】
对于样例 $1$,将砖平分为两份,则每份一共有 $6$ 块砖。用小推车一次可以搬 $2$ 块砖,只耗费 $2$ 的体力,比一块一块搬砖划算。因此 Aya 选择用三次小推车搬砖,耗费 $6$ 的体力。注意一共有两份砖头,因此一共是耗费 $12$ 的体力。
【数据范围】
对于所有数据,$1 \leq n,a,k,b \leq 10 ^ 6$。请注意数据范围。
作答
#include<bits/stdc++.h>
using namespace std;
//导入与使用
int main(){
//开始主函数运行
long long n , a , k , b , sum , ans , ans2 ;
cin >> n >> a >> k >> b ;
if( n % 2 != 0){
cout << -1;
return 0;
}
if(a>b/k){
if(n/2%k*a>b){
cout<<(n/2/k+1)*b*2;
}else{
cout<<(n/2/k*b+n/2%k*a)*2;
}
}
else{
cout<<a*n;
}
return 0;
}