AcWing 4790. 买可乐 数学方法O(1)
原题链接
中等
作者:
楚时月
,
2022-12-31 20:55:43
,
所有人可见
,
阅读 209
数学O(1)方法
#include <iostream>
using namespace std;
int main()
{
int c, d, n, m, k, fee = 0;
scanf("%d%d%d%d%d", &c, &d, &n, &m, &k);
if (k < n * m)
{
if (c * 1.0 / n < d) // 如果按箱买每瓶比单买便宜
{
int w = 0, a = 0; // w为整箱的箱数, a为单买瓶数
w = (n * m - k) / n;
if (n * m - n * w && c < ((n * m - k) % n) * d)
// 若再买一箱补足m箱比再买若干瓶补足m箱便宜,再买一箱
w++;
else a = (n * m - k) % n; // 不然单买几瓶补足mn瓶
fee += c * w + d * a;
}
else // 如果按箱买每瓶不比单买便宜
{
fee += d * (n * m - k);
}
}
printf("%d\n", fee);
return 0;
}