【题解】CF161B Discounts
程序员文章站
2023-11-08 20:14:58
[TOC] 题目 "CF161B Discounts" 思路 贪心。很显然对于一个板凳(价格为 )所能使我们最多少花费$\frac{c}{2}$的金钱。 原因如下: 如果你将一件价格比该板凳大的商品与板凳放在一起没有贡献。 如果你将一件价格比该板凳小的商品与板凳放在一起贡献减小。 贪心策略:将板凳中 ......
目录
题目
思路
贪心。很显然对于一个板凳(价格为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; }
上一篇: STL库学习笔记(一)——什么是STL?
推荐阅读
-
Windows下利用Gvim写PHP产生中文乱码问题解决方法
-
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
-
PHP商品秒杀问题解决方案实例详解【mysql与redis】
-
MySQL中NOT IN填坑之列为null的问题解决
-
Linux中date命令转换日期提示date: illegal time format问题解决
-
MySQL5.7.03 更换高版本到MySQL 5.7.17安装过程及发现问题解决方案
-
MySQL 与 Elasticsearch 数据不对称问题解决办法
-
Pycharm中Python环境配置常见问题解析
-
web.py在SAE中的Session问题解决方法(使用mysql存储)
-
Android关于SeekBar无法点击到最大值问题解决方法记录(推荐)