PriceFixed

题目大意

市场上又 \(n\) 种商品,每种商品的价格都是 \(2\) 。对于第 \(i\) 种商品 \(a_i\) 件。对于商品 \(i\) 给出一个值 \(b_i\) ,如果你已经购买了 \(b_i\) 种商品(购买所有商品的综合),那么你购买这种商品,价格为 \(1\) 。

求最小代价。

分析

出题人特意标注:每种商品不一定只能购买 \(a_i\) 件。

在引导我们往哪个地方想?——我们可以通过刷已经打折的商品来达到让没有打折的商品打折。

这其实是个坑……

仔细想想,你白花了 \(1\) 点代价,即使打折了,你再买,也根本不会变优。其实无非也就两种情况,你花费一个 \(1\) ,赚到了一个购买量,如果到了 \(b_i\) ,你买,相当于你还是花了 \(2\) ,如果没到,反而你还花了 \(3\) ,将这个例子带到整个里面来看,把一个商品看成“一段”商品,是一样的,这种买法不可能更优

那接下来我们怎么买呢?

贪心!

将每种商品按照 \(b_i\) 排序,\(b_i\) 越大我们越优先买,因为他最不可能打折,接下来按照以下程序:

  • 如果当前 \(b_i\) 最大的商品我们还没有买够,就买,同时注意目前没有买完的商品中 \(b_i\) 最小的数量。

  • 一旦购买量达到任意一个商品的 \(b_i\) ,马上将这种商品买完。

不难证明这种方法一定是最优的。

CODE

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9') { if(ch=='-') w*=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
struct node{
int a,b;
}p[N];
int n,ans;
inline bool cmp(node x,node y) { return x.b>y.b; }
signed main()
{
n=read();
for(register int i=1;i<=n;i++) p[i].a=read(),p[i].b=read();
sort(p+1,p+n+1,cmp);
int l=1,r=n,sum=0;
while(l<=r){
if(sum<p[r].b){
bool AA=false,BB=false;
int temp1=sum;
ans+=2*min(p[l].a,p[r].b-sum); //算价格
if(p[l].a<=p[r].b-sum) BB=true;
else AA=true;
sum+=min(p[l].a,p[r].b-sum);
if(BB) l++;
if(AA) p[l].a-=(p[r].b-temp1);
}
else { ans+=p[r].a,sum+=p[r].a; r--; }
}
printf("%lld\n",ans);
return 0;
}

CF1539D PriceFixed[题解]的更多相关文章

  1. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. GO学习-(10) Go语言基础之指针

    Go语言基础之指针 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 任何程序数 ...

  2. Fiddler抓包后转成jmeter脚本

    Fiddler的安装及使用 1.安装:无特别需要注意事项 2.使用: (1)目前我使用的是Fiddler 4版本,打开页面如下 (2)如下图,在界面右侧找到Filters tabs,根据需要进行设置, ...

  3. 手把手带你快速入门jQuery(视频|资料,建议收藏!)

    jQuery是什么? jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架). jQuery设计的宗旨是 ...

  4. THINKPHP_(2)_TP模型的多表关联查询和多表字段的关键字搜索。

    问题: 上述内容中,标题和学年属于一个数据表.分类则属于另外一个数据表,并且是利用id关联后,另外一个数据表中的title字段. 需要设置关键字搜索,实现多表关联查询和多表字段的关键字搜索. 解决方法 ...

  5. 摄像头ISP系统原理(下)

    摄像头ISP系统原理(下) l  WDR(Wide Dynamic Range)------宽动态 动态范围(Dynamic Range)是指摄像机支持的最大输出信号和最小输出信号的比值,或者说图像最 ...

  6. 将代码生成器带入TVM

    将代码生成器带入TVM 为了使数据科学家不必担心开发新模型时的性能,硬件后端提供程序(例如Intel,NVIDIA,ARM等)可以提供诸如cuBLAS或cuDNN之类的内核库以及许多常用的深度学习内核 ...

  7. 八、配置Tomcat日志

    [root@svr5 ~]# vim /usr/local/tomcat/conf/server.xml .. .. <Host name="www.a.com" appBa ...

  8. 四、缓存DNS

    作用:缓存解析结果,提高解析速度 搭建方式: 1.全局转发,所有的DNS解析请求全部转发给公网DNS 2.根域迭代,所有的DNS解析请求全部发给根域DNS服务器 真机上实现缓存DNS服务器 1.搭建Y ...

  9. 1、java语言概述

    Java基础知识图解 软件开发 软件开发 软件,即一系列按照特定顺序组织的计算机数据和指令的集合.有系统软件和应用软件之分. 人机交互方式 图形化界面(Graphical User Interface ...

  10. Kubernetes 实战——升级应用(Deployment)

    一.更新运行在 Pod 内的应用程序 1. 修改 Pod 模板 将导致应用程序在一定时间内不可用 2. 修改 Service 的 Pod 选择器 需要同时运行两倍的 Pod 3. 滚动升级 应用程序需 ...