Shopping

这提开始卡在了凳子和购物车的关系上。

如果凳子和购物车一样多,那么就是每个购物车放一个凳子,剩下的物品按价格降序往每个购物车放一个。再多出来的就随便放了,因为放哪里都是原价。

如果存在凳子本身就很贵的情况,这种做法依旧不影响。因为哪怕购物车里只有一个凳子,那么这个凳子的价格也是打折的。

所以最后的做法就是统计凳子的个数,与购物车的个数比较,取较小值,就是打折的次数 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值