【题解】CF161B Discounts
题目
思路
贪心。很显然对于一个板凳(价格为c)所能使我们最多少花费\(\frac{c}{2}\)的金钱。
原因如下:
如果你将一件价格比该板凳大的商品与板凳放在一起没有贡献。
如果你将一件价格比该板凳小的商品与板凳放在一起贡献减小。
贪心策略:将板凳中价格前\(k-1\)大的单独放一辆购物车,板凳不够就用商品即可。
\(Code\)
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#define min(a,b) a<b?a:b
inline void read(int &T) {
int x=0;bool f=0;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
T=f?-x:x;
}
inline void write(int x) {
if(x<0) putchar('-'),write(-x);
else {
if(x/10) write(x/10);
putchar(x%10+'0');
}
}
int n,k;
struct dx {
int w,type,num;
friend bool operator <(dx x,dx y) {
if(x.type==y.type) return x.w>y.w;
return x.type<y.type;
}//板凳比其他商品的优先级要高,价格高的比价格低的优先级要高。
}a[1001];
int main() {
read(n),read(k);
for(int i=1;i<=n;++i) {
read(a[i].w),read(a[i].type);a[i].num=i;
}
std::sort(a+1,a+n+1);//排序,如此排序后将做法转化为了将k-1间商品单独放一辆购物车,剩余商品放入最后一辆购物车。
double cost=0;bool f=0;
int minn=0x7fffffff;
for(int i=1;i<=n;++i) {
if(i<=k-1) {
if(a[i].type==1) cost+=a[i].w*1.0/2.0;
else cost+=a[i].w*1.0;
}else {
cost+=a[i].w*1.0;
minn=min(minn,a[i].w);
if(a[i].type==1) f=1;//如果剩余商品中有个板凳的话要价格减半。
}
}
if(f) cost-=minn*1.0/2.0;
std::cout<<std::fixed<<std::setprecision(1)<<cost<<'\n';//注意保留一位小数
for(int i=1;i<=k-1;++i) {
printf("1 %d\n",a[i].num);
}
printf("%d ",n-k+1);
for(int i=k;i<=n;++i) {
printf("%d ",a[i].num);
}
puts("");
return 0;
}
【题解】CF161B Discounts的更多相关文章
- 钠 GZY整理贪心
目录 CF140C New Year Snowmen CF161B Discounts P1842 奶牛玩杂技 CF140C New Year Snowmen #include <bits/st ...
- 「CF161B」Discounts
传送门 Luogu 解题思路 贪心地想一想,我们肯定要让凳子去给价格越高的商品打半价,那么我们就先按照价格排序,但是要优先把凳子排在前面. 然后我们发现一条凳子肯定只能给价格小于等于它本身的物品打半价 ...
- CF1132B Discounts 题解
Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\).有 \(q\) 次询问,每次询问给定一个数 \(x\).对于每次询问,求出数组中去掉一个第 \(x\) ...
- Codeforces Round #160 (Div. 1) 题解【ABCD】
Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...
- 【50.49%】【codeforces 731B】Coupons and Discounts
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- CF 1132A,1132B,1132C,1132D,1132E,1132F(Round 61 A,B,C,D,E,F)题解
A.Regular bracket sequence A string is called bracket sequence if it does not contain any characters ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
随机推荐
- 准备环境 安装window10+ubuntu18双系统
记录一下这次双硬盘安装windows10和Ubuntu18的过程 1通过u启通制作pe,并将windows的镜像放入到u盘中 2电脑通过u盘启动,进入pe 3在pe中将两块固态硬盘制作为guid格式, ...
- Django-查询优化
表数据: from django.db import models class Province(models.Model): name = models.CharField(max_length=1 ...
- Java8 新特性 Optional 类
Optional 类的简介 Optional类的是来自谷歌Guava的启发,然后就加入到Java8新特性中去了.Optional类主要就是为子决解价值亿万的错误,空指针异常. Optional ...
- SQL ------------ avg() 与 sum 函数
AVG() 函数返回数字列的平均值 注意是数字的平均数, 语法: select avg(字段) from 表名 建个表,弄点数据 使用 select avg(字段) as 平均数 from 表名 与w ...
- url拼接参数格式
在一些情况下,需要直接往url上拼接请求参数. http://www.yanggb.com?flag=1&type=normal&role=customer 通过上面的例子就可以看出, ...
- why’s kafka so fast
As we all know that Kafka is very fast, much faster than most of its competitors. So what’s the reas ...
- HTML+CSS学习笔记整理
一.标签语义化(重点): 1.可以方便代码的阅读和维护 2.同时让网络爬虫更好的解析从而更好的分析其内容 3.更好的优化引擎 如何做到标签语义化:个人理解是,首先,网页的HTML主要作用在网页的结构上 ...
- Oracle数据库触发器
第一次写触发器,浪费了一个小时,少了一个;编译不通过 当A表有更新或插入数据时,则触发器执行向B表插入对应条件的数据1 CREATE OR REPLACE TRIGGER Test -- 触发器名称 ...
- python 数据结构之图的储存方式
参考链接:https://blog.csdn.net/u014281392/article/details/79120406 所描述的图的结构为: 下面介绍不同的储存方式,我想不必详细分别是每个名称都 ...
- git远程写协作同步
1:创建一个要提交的文件2 git init 初始化 3 git remote add origin https://github.com/maohongli/cang.git 建立远程连接4 git ...