题目链接:http://codeforces.com/contest/161/problem/B

题意:

    有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车中有凳子,那么这辆购物车中最便宜的那个物品的价格能减少50%,问你如何放这些物品才能使总价钱最少。

思路:

    简单贪心,判断凳子数量是否大于等于k行。

 #include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair <LL, int> P;
const int N = ;
LL a[N];
P val[N], val2[N];
LL inf = 1e9 + ;
vector <int> res[N];
int main()
{
int n, m;
scanf("%d %d", &n, &m);
int pos = , pos2 = , c;
for(int i = ; i <= n; ++i) {
scanf("%lld %d", a + i, &c);
if(c == ) {
val2[++pos2].first = a[i];
val2[pos2].second = i;
} else {
val[++pos].first = a[i];
val[pos].second = i;
}
}
sort(val + , val + pos + );
sort(val2 + , val2 + pos2 + );
double ans = ;
int f = ;
if(pos >= m) {
int i, j;
for(i = pos, j = m - ; j; --i, --j) {
ans += val[i].first * 1.0 / ;
res[++f].push_back(val[i].second);
}
++f;
for(; i >= ; --i) {
ans += val[i].first;
res[f].push_back(val[i].second);
}
for(i = pos2; i > ; --i) {
ans += val2[i].first;
res[f].push_back(val2[i].second);
}
if((val[].first >= val2[].first && pos2)) {
ans += val[].first;
ans += val2[].first*1.0 / ;
res[f].push_back(val[].second);
res[f].push_back(val2[].second);
} else if(pos2) {
ans += val2[].first;
ans += val[].first*1.0 / ;
res[f].push_back(val2[].second);
res[f].push_back(val[].second);
} else {
ans += val[].first*1.0 / ;
res[f].push_back(val[].second);
}
} else {
for(int i = pos; i; --i) {
ans += val[i].first * 1.0 / ;
res[++f].push_back(val[i].second);
}
int i, j;
for(i = pos2, j = pos + ; i && j <= m; --i, ++j) {
ans += val2[i].first;
res[++f].push_back(val2[i].second);
}
for(; i; --i) {
ans += val2[i].first;
res[f].push_back(val2[i].second);
}
}
printf("%.1f\n", ans);
for(int i = ; i <= m; ++i) {
printf("%d ", res[i].size());
for(int j = ; j < res[i].size(); ++j) {
printf("%d%c", res[i][j], j == res[i].size() - ? '\n': ' ');
}
}
return ;
}

Codeforces 161 B. Discounts (贪心)的更多相关文章

  1. codeforces 704B - Ant Man 贪心

    codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...

  2. CodeForces - 50A Domino piling (贪心+递归)

    CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...

  3. Codeforces 731B Coupons and Discounts(贪心)

    题目链接 Coupons and Discounts 逐步贪心即可. 若当前位为奇数则当前位的下一位减一,否则不动. #include <bits/stdc++.h> using name ...

  4. Codeforces 161 D. Distance in Tree (树dp)

    题目链接:http://codeforces.com/problemset/problem/161/D 题意: 给你一棵树,问你有多少对点的距离为k. 思路: dp[i][j]表示离i节点距离为j的点 ...

  5. CodeForces 176A Trading Business 贪心

    Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...

  6. Codeforces Gym 100803C Shopping 贪心

    Shopping 题目连接: http://codeforces.com/gym/100803/attachments Description Your friend will enjoy shopp ...

  7. Codeforces 486C Palindrome Transformation(贪心)

    题目链接:Codeforces 486C Palindrome Transformation 题目大意:给定一个字符串,长度N.指针位置P,问说最少花多少步将字符串变成回文串. 解题思路:事实上仅仅要 ...

  8. Codeforces 1154D - Walking Robot - [贪心]

    题目链接:https://codeforces.com/contest/1154/problem/D 题解: 贪心思路,没有太阳的时候,优先用可充电电池走,万不得已才用普通电池走.有太阳的时候,如果可 ...

  9. codeforces 735C Tennis Championship(贪心+递推)

    Tennis Championship 题目链接:http://codeforces.com/problemset/problem/735/C ——每天在线,欢迎留言谈论. 题目大意: 给你一个 n ...

随机推荐

  1. HDU 1231 最大连续子序列

    和前面两道题一样 不过这题要求输出子序列首尾的元素的值,而且如果所有元素都小于0的话,规定子序列的和为0,并输出整个序列的首尾元素. //#define LOCAL #include <iost ...

  2. VC++菜单

    2.1 如何动态添加和删除菜单项 AppendMenu InsertMenu DeleteMenu ////////////////////////////////////////////////// ...

  3. BZOJ 1555 KD之死

    贪心,按t+w排序维护不一定放到拖车上的大根堆. #include<iostream> #include<cstdio> #include<cstring> #in ...

  4. BZOJ 3391 Tree Cutting网络破坏

    不想写. #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> ...

  5. 判断https

    判断https <script> if(window.location.protocol=='https:'){ window.location.href='http://e.abchin ...

  6. 大数据时代的技术hive:hive介绍

    我最近研究了hive的相关技术,有点心得,这里和大家分享下. 首先我们要知道hive到底是做什么的.下面这几段文字很好的描述了hive的特性: 1.hive是基于Hadoop的一个数据仓库工具,可以将 ...

  7. Php 笔记2-----手机端 与 php服务器的通信

    对于 手机端 和 php服务器的通信,是不存在表单这一概念的  ,除非自己去实现, 所以通常情况下步骤是: 假定上传的是字符串. 1  手机端的流程是 把文件或者字符串,转化为 特定的流. 2 通过h ...

  8. Jersey搭建Restful服务器 on Ubuntu

    自己试着在Ubuntu上搭建一个 1.首先安装eclipse和tomcat sudo apt-get install eclipse tomcat7 -y 2.把tomcat的group assign ...

  9. 开源堡垒机GateOne的安装、配置笔记

    因为内部临时需要这么一套系统,所以搜搜查查,搞定了系统部署,使用pam认证的配置. 系统初始化是使用CentOS 6.5 Mini x64版本.   首先exports http_proxy和http ...

  10. java学习随笔--- 捣蛋vector

    最近比较有时间啦,有时间搞下java,个人觉得学这门语言语法太多啦,不一一去学习啦,心血来潮,挂了个struct2的源代码,一入深似海啊,看得我天花缭乱,从最简单的开始吧 public static ...