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. 如何实现一个简易版的 Spring - 如何实现 AOP(下)

    前言 前面两篇 如何实现 AOP(上).如何实现 AOP(中) 做了一些 AOP 的核心基础知识简要介绍,本文进入到了实战环节了,去实现一个基于 XML 配置的简易版 AOP,虽然是简易版的但是麻雀虽 ...

  2. Java处理Excel中的日期格式

    Java处理Excel中的日期格式 2011-12-23 17:34:03|  分类: java |举报 |字号 订阅 下载LOFTER 我的照片书  |   在Excel中的日期格式,其数值为距离1 ...

  3. C++ OP相关注意事项

    C++ OP相关注意事项 Paddle中Op的构建逻辑 1.Paddle中Op的构建逻辑 Paddle中所有的Op都继承自OperatorBase,且所有的Op都是无状态的,每个Op包含的成员变量只有 ...

  4. TensorRT IRNNv2Layer

    TensorRT IRNNv2Layer IRNNv2Layer层实现递归层,如递归神经网络(RNN).门控递归单元(GRU)和长短期记忆(LSTM).支持的类型有RNN.GRU和LSTM.它执行一个 ...

  5. Thumb扩展

    Thumb扩展 ARM处理器已在嵌入式系统,手持计算机和其系统中得到了最大的应用,在这些系统中,系统对使用有限资源进行大量工作的要求很高.Thumb扩展是为解决资源消耗中的某些方面而创建的,已成为当今 ...

  6. C++/VS基础篇

    ------------恢复内容开始------------ VS: 1.项目配置 2.IDE设置 错误列表是输出窗口的大概,根据error语法整理出,不准确. C++: 1.C++特点 优点 可直接 ...

  7. python----日志模块loggin的使用,按日志级别分类写入文件

    1.日志的级别 日志一共分为5个等级,从低到高分别是: 级别 说明 DEBUG 输出详细的运行情况,主要用于调试. INFO 确认一切按预期运行,一般用于输出重要运行情况. WARNING 系统运行时 ...

  8. NOIP模拟测试30「return·one·magic」

    magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...

  9. NOIP模拟测试9「随·单·题」

    liu_runda出的题,先$\%\%\%\%\%\%\%\%\%\%\%$为敬 随 考试时没有Qj 然后甚至没做,甚至没交 我不知道我怎么想的 这个题挺难改 你需要用到 循环矩阵快速幂,矩阵快速幂优 ...

  10. EasyExcel随笔

    EasyExcel 注意点 不支持的功能 单个文件的并发写入.读取 读取图片 宏 csv读取 出现 NoSuchMethodException, ClassNotFoundException, NoC ...