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. VMware Cloud Foundation 4.2 发布 - 领先的混合云平台

    VMware Cloud Foundation 4.2 | 09 FEB 2021 | Build 17559673 VMware Cloud Foundation 4.1 | 06 OCT 2020 ...

  2. 二:使用VS2019 + .net 6创建 webapi 项目

    0.创建一个.net 6项目.由于目前.net 6还是预览版,所以需要添加预览版SDK功能.工具 -> 选项 -> 环境 -> 预览功能 ,勾选使用.net sdk预览版. 1.新建 ...

  3. mybatis运行出现org.apache.ibatis.binding.BindingException

    今天学习mybatis的第一天,发现用junit测试报出了次异常:org.apache.ibatis.binding.BindingException: Type interface cn.dzp.d ...

  4. deeplearning量化

    deeplearning量化 量化配置 通过字典配置量化参数 TENSORRT_OP_TYPES = [ 'mul', 'conv2d', 'pool2d', 'depthwise_conv2d', ...

  5. C# 强行锁定 第三方 外部 应用程序窗体窗口的分辨率尺寸大小 禁止鼠标拖拽改变窗口大小

    我们也许会有一些奇怪的需求,比如说禁止一个外部程序的窗口大小更改. 如果我们没法修改外部程序的代码,那要怎么做呢? 当然,我们可以通过DLL注入目标程序的方式去Hook或registry一个事件来检测 ...

  6. 3、Java基础语法(下):程序流程控制

    程序流程控制 从键盘获取不同类型的变量: 使用Scanner类,具体实现步骤: 1.导包:import java.util.Scanner; 2.Scanner的实例化:Scanner scan = ...

  7. 可微渲染 SoftRas 实践

    SoftRas 是目前主流三角网格可微渲染器之一. 可微渲染通过计算渲染过程的导数,使得从单张图片学习三维结构逐渐成为现实.可微渲染目前被广泛地应用于三维重建,特别是人体重建.人脸重建和三维属性估计等 ...

  8. spring boot 加载web容器tomcat流程源码分析

    spring boot 加载web容器tomcat流程源码分析 我本地的springboot版本是2.5.1,后面的分析都是基于这个版本 <parent> <groupId>o ...

  9. Redis不是只有get set那么简单

    我以前还没接触Redis的时候,听到大数据组的小伙伴在讨论Redis,觉得这东西好高端,要是哪天我们组也可以使用下Redis就好了,好长一段时间后,我们项目中终于引入了Redis这个技术,我用了几下, ...

  10. Java字符串比较(3种方法)以及对比 C++ 时的注意项

    字符串比较是常见的操作,包括比较相等.比较大小.比较前缀和后缀串等.在 Java 中,比较字符串的常用方法有 3 个:equals() 方法.equalsIgnoreCase() 方法. compar ...