Codeforces 161 B. Discounts (贪心)
题目链接: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 (贪心)的更多相关文章
- codeforces 704B - Ant Man 贪心
codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...
- CodeForces - 50A Domino piling (贪心+递归)
CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...
- Codeforces 731B Coupons and Discounts(贪心)
题目链接 Coupons and Discounts 逐步贪心即可. 若当前位为奇数则当前位的下一位减一,否则不动. #include <bits/stdc++.h> using name ...
- Codeforces 161 D. Distance in Tree (树dp)
题目链接:http://codeforces.com/problemset/problem/161/D 题意: 给你一棵树,问你有多少对点的距离为k. 思路: dp[i][j]表示离i节点距离为j的点 ...
- CodeForces 176A Trading Business 贪心
Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...
- Codeforces Gym 100803C Shopping 贪心
Shopping 题目连接: http://codeforces.com/gym/100803/attachments Description Your friend will enjoy shopp ...
- Codeforces 486C Palindrome Transformation(贪心)
题目链接:Codeforces 486C Palindrome Transformation 题目大意:给定一个字符串,长度N.指针位置P,问说最少花多少步将字符串变成回文串. 解题思路:事实上仅仅要 ...
- Codeforces 1154D - Walking Robot - [贪心]
题目链接:https://codeforces.com/contest/1154/problem/D 题解: 贪心思路,没有太阳的时候,优先用可充电电池走,万不得已才用普通电池走.有太阳的时候,如果可 ...
- codeforces 735C Tennis Championship(贪心+递推)
Tennis Championship 题目链接:http://codeforces.com/problemset/problem/735/C ——每天在线,欢迎留言谈论. 题目大意: 给你一个 n ...
随机推荐
- 安卓WebView中接口隐患与手机挂马利用(远程命令执行)
安卓应用存在安全漏洞,浏览网站打开链接即可中招.目前有白帽子提交漏洞表明目前安卓平台上的应用普遍存在一个安全漏洞,用户打开一个链接就可导致远程安装恶意应用甚至完全控制用户手机,目前微信,手机QQ,QV ...
- HDU 1158 Employment Planning【DP】
题意:给出n个月,雇佣一个人所需的钱hire,一个人工作一个月所需要的钱salary,解雇一个人所需要的钱fire,再给出这n个月每月1至少有num[i]个人完成工作,问完成整个工作所花费的最少的钱是 ...
- Jenkins+Maven+SVN搭建自动部署、自动测试环境
.打开http://10.3.15.78:8080/jenkins/,第一次进入里面没有数据,我们需要创建job,我们这有2个项目,需要创建2个job.http://10.3.34.163:9890/ ...
- C语言之复杂指针详解
在<C陷阱与缺陷>第二章第一节中有这样一个声明: (*(void(*)())0)(): 看到这样的表达式估计让不少人都“不寒而栗”了吧,其实虽然看起来复杂,但是构造这类表达式其实只有一条简 ...
- java动态代理复习
package com.free.testProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Met ...
- ecshop 无限分类解析(转)
对ecshop无限级分类的解析,认真分析后发现真的其算法还是比较精典的其实并不难理解,有举例方便大家理解 function cat_options($spec_cat_id, $arr) { stat ...
- 支持向量机之Hinge Loss 解释
Hinge Loss 解释 SVM 求解使通过建立二次规划原始问题,引入拉格朗日乘子法,然后转换成对偶的形式去求解,这是一种理论非常充实的解法.这里换一种角度来思考,在机器学习领域,一般的做法是经验风 ...
- 【自动化测试】Selenium excel操作
http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html http://blog.csdn.net/five3/article/det ...
- ssh-keygen的用法
一.概述 1.就是为了让两个linux机器之间使用ssh不需要用户名和密码.采用了数字签名RSA或者DSA来完成这个操作 2.模型分析 假设 A (192.168.20.59)为客户机器,B(192. ...
- Bootstrap初级用户谈谈网页在手机上的显示效果优化
本人之前已经使用Bootstrap有一段时间了,但是之前做出的网站都只是在电脑端使用,没有注意过手机端的显示效果.这两天自己使用Bootstrap做了一个简单的Web个人日志系统,想在手机端也使用,桌 ...