#CF1978B. 新面包店

    ID: 6462 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>二分查找、贪心、数学、三分查找、难度*800

新面包店

B. 新面包店

每次测试时间限制:11 秒 每次测试内存限制:256256 兆字节

鲍勃决定开一家面包店。开业当天,他烤了nn个待售的面包。每个面包的正常售价为aa个硬币,为了吸引顾客,鲍勃推出了如下促销活动:

鲍勃选择某个整数kk0kmin(n,b)0 \le k \le \min(n,b))。 鲍勃卖出的前kk个面包按调整后的价格定价,其中第ii个(1ik1 \le i \le k)售出的面包价格为(bi+1)(b - i + 1)个硬币。 剩余的(nk)(n - k)个面包,每个按aa个硬币出售。

注意kk可以等于00,这种情况下,鲍勃的所有面包都将按正常价格aa出售。

请帮鲍勃计算出,卖出全部nn个面包能获得的最大利润。

输入

每组测试包含多个测试用例。 第一行输入一个整数tt1t1041 \le t \le 10^4),表示测试用例的数量。

每个测试用例仅占一行,包含三个整数nnaabb1n,a,b1091 \le n,a,b \le 10^9),分别代表面包的数量、面包的正常售价、促销活动中第一个面包的售价。

输出

对于每个测试用例,输出一个整数,表示鲍勃能获得的最大利润。

样例输入

77 44 44 55 55 55 99 1010 1010 55 55 55 1111 10000000001000000000 10000000001000000000 10000000001000000000 10000000001000000000 10000000001000000000 11 10001000 11 10001000

样例输出

1717 3535 100100 4545 10000000000000000001000000000000000000 10000000000000000001000000000000000000 500500500500

核心解题逻辑(基于标程)

一、关键分类讨论

我们根据促销起始价 b\boldsymbol{b} 和正常售价 a\boldsymbol{a} 的大小关系,分两种核心情况计算最大利润:

  1. b<a\boldsymbol{b < a} 时 所有促销面包的价格都会低于正常售价 a\boldsymbol{a},此时选择 k=0\boldsymbol{k=0} 利润最大,即全部面包按原价销售。 总利润公式:an\boldsymbol{a \cdot n}

  2. ba\boldsymbol{b \ge a} 时 最优的促销数量为 k=min(ba,n)\boldsymbol{k = \min(b-a, n)},这个取值是利润最大化的关键:

  • kk 大于该值,部分面包的促销价会低于 aa,利润减少;
  • kk 小于该值,本可以高价卖出的面包按原价出售,利润未达最大。

二、利润计算原理

促销的 k\boldsymbol{k} 个面包价格构成等差数列: 首项为 b\boldsymbol{b},末项为 bk+1\boldsymbol{b-k+1},总数量为 k\boldsymbol{k}。 根据等差数列求和公式,促销部分总利润为: b+(bk+1)2k\boldsymbol{\frac{b + (b-k+1)}{2} \cdot k}

剩余的 nk\boldsymbol{n-k} 个面包按正常售价销售,这部分利润为: (nk)a\boldsymbol{(n-k) \cdot a}


三、最终最大利润公式

将两部分利润相加,得到总最大利润: $\boldsymbol{ans = \frac{b + (b-k+1)}{2} \cdot k + (n-k) \cdot a}$ 其中固定取值 k=min(ba,n)\boldsymbol{k = \min(b-a, n)}