2018 Wannafly summer camp Day3--Shopping

Shopping

描述

题目描述:

你要买n件物品,其中有一些是凳子。

商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品。

你有m辆购物车,请最小化你的花费。

输入:

第一行一个整数t表示数据组数 (1t100)

每组数据第一行两个整数n,m(1n,m1000),接下来n行每行两个整数ai,bi,分别表示第i件物品的价格以及它是否是凳子(1ai105,0bi1)

输出:

每组数据输出一行一个实数表示最小花费,保留一位小数。

样例输入
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
将最贵的min(m,cnt)个物品打折,cnt为凳子个数
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 using namespace std;
 6 int t, n, m,a[1005], b, cnt;
 7 double ans;
 8 bool cmp(int a, int b){return a > b;}
 9 int main(void) {
10     cin >> t;
11     while (t-- > 0) {
12         cin >> n >> m;
13         cnt = 0, ans = 0;
14         for (int i = 0; i < n; i++) {
15             cin >> a[i] >> b;
16             if (b == 1)
17                 cnt++;
18         }
19         sort(a, a + n, cmp);
20         cnt = min(cnt, m);
21         for (int i = 0; i < n; i++) {
22             if (i < cnt)
23                 ans += a[i] * 0.5;
24             else
25                 ans += a[i];
26         }
27         printf("%.1lf\n", ans);
28     }
29     return 0;
30 }
View Code

 


posted @ 2018-08-06 21:57  Chasssser  阅读(319)  评论(0编辑  收藏  举报