这提开始卡在了凳子和购物车的关系上。
如果凳子和购物车一样多,那么就是每个购物车放一个凳子,剩下的物品按价格降序往每个购物车放一个。再多出来的就随便放了,因为放哪里都是原价。
如果存在凳子本身就很贵的情况,这种做法依旧不影响。因为哪怕购物车里只有一个凳子,那么这个凳子的价格也是打折的。
所以最后的做法就是统计凳子的个数,与购物车的个数比较,取较小值,就是打折的次数 k。然后再把所有物品价格降序排列,前k个打5折即可。
在写代码时还遇到点问题,就是总价格 sum 应该定义为 double,如果为 int 最后的结果会是 0。
因为 int 变量与小数运算可以返回 double,但变量本身还是 int。
题目描述
你要买n件物品,其中有一些是凳子。
商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品。
你有m辆购物车,请最小化你的花费。
输入描述:
第一行一个整数t表示数据组数 (1 ≤ t ≤ 100)。
每组数据第一行两个整数n,m (1 ≤ n,m ≤ 1000),接下来n行每行两个整数ai,bi,分别表示第i件物品的价格以及它是否是凳子 (1 ≤ ai ≤ 105, 0 ≤ bi ≤ 1)。
输出描述:
每组数据输出一行一个实数表示最小花费,保留一位小数。
示例1
输入
2
5 1
1 0
2 1
3 1
4 0
5 0
5 10
1 0
2 1
3 1
4 0
5 0
输出
12.5
10.5