题目链接: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 3433 (DP + 二分) A Task Process

    题意: 有n个员工,每个员工完成一件A任务和一件B任务的时间给出,问要完成x件A任务y件B任务所需的最短时间是多少 思路: DP + 二分我也是第一次见到,这个我只能说太难想了,根本想不到. dp[i ...

  2. 漫游Kafka设计篇之主从同步

    Kafka允许topic的分区拥有若干副本,这个数量是可以配置的,你可以为每个topci配置副本的数量.Kafka会自动在每个个副本上备份数据,所以当一个节点down掉时数据依然是可用的. Kafka ...

  3. codevs 4919 线段树练习4

    线段树水题.我是ziliuziliu,我是最强的#include<iostream> #include<cstdio> #include<cstring> #inc ...

  4. PHP String函数分类

    1.查找字符位置函数: strpos  ($str,search,[int]):    查找search在$str中的第一次位置从int开始: stripos ($str,search,[int]): ...

  5. js中判断是不是数字

    使用isaNa来进行判断,这个函数的底层实现是:Nunmber,如果经过转化是数字则返回false,否则返回true Number('100px')返回的是ANA,parseInt('100px')返 ...

  6. c#枚举自定义,用于数据绑定。 z

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Enum)] public ...

  7. [转]SqlPlus安装配置

    本文转载自http://blog.csdn.net/wuxiaoyan_home/article/details/4826440 一.下载oracle 10g sqlplus软件 http://www ...

  8. XML Schema 简介

    XML Schema 是基于 XML 的 DTD 替代者. XML Schema 可描述 XML 文档的结构. XML Schema 语言也可作为 XSD(XML Schema Definition) ...

  9. 开扒php内核函数,第三篇 implode

    一开始觉得implode挺容易实现,但是写着写着才发现是挺复杂的,不说啦 来看看implode的用法吧 <?php $arr = array('Hello','World!','Beautifu ...

  10. C++11 现代C++风格的新元素--简介

    C++11标准推出了很多有用的新特性,本文特别关注那些相比C++98更像是一门新语言的特性,理由是: 这些特性改变了编写C++程序使用的代码风格和习语[译注 1],通常也包括你设计C++函数库的方式. ...