题目传送门(内部题105)


输入格式

  每组数据第一行一个正整数$n$,表示硬盘块数,接下来$n$行,每行两个正整数,第一个正整数为硬盘格式化前的容量,第二个正整数为格式化之后的容量。


输出格式

  对每组数据输出一行一个正整数表示答案。


样例

样例输入1:

4
6 6
1 7
3 5
3 5

样例输出1:

1

样例输入2:

4
2 2
3 3
5 1
5 10

样例输出2:

5


数据范围与提示

样例解释:

  第一组数据中,先将第二块硬盘的数据存放到容量为$1$的额外硬盘上再进行格式化,其容量变为$7$,之后将第一块硬盘的数据保存到第二块硬盘上,格式化第一块硬盘,最后将剩下两块硬盘的数据保存到第一块硬盘上再进行格式化。
  第二组数据中,至少需要大小为$5$的额外空间才能格式化最后一块硬盘,而格式化最后一块硬盘后其它硬盘的内容都可以被保存然后格式化,故答案为$5$。

数据范围:

  对于前$30\%$的数据,$n\leqslant 10$。
  对于另外$20\%$的数据,格式化后硬盘的容量均大于格式化前的硬盘容量。
  对于前$85\%$的数据,有$n\leqslant 1,000$。
  对于$100\%$的数据,$1\leqslant n\leqslant 1,000,000$,输入中所有的数都是不超过$1,000,000,000=1,000^3$的正整数。


题解

考虑贪心。

为了保证代价最小,肯定是要让最后没有被用的硬盘空间最小。

考虑先收益再花费,一定是先格式化空间会变大的,然后再格式化空间会变小的一定不劣。

那么现在分开讨论这两种硬盘。

先来考虑格式化之后空间会变大的,先格式化格式化之前空间最小的一定不劣,因为我们会花费最小在每一块硬盘上,然后用它带来的贡献去弥补下一块硬盘。

再来考虑格式化之后空间会变小的,因为格式化这些硬盘的总代价不变,所以尽可能让最后没有被用的硬盘空间小,也就是格式化之后最小的硬盘一定放在最后;接着考虑前面的硬盘,因为最后的硬盘已经固定,就可以不考虑它,那么剩下的硬盘中格式化之后空间最小的一定放在最后;一直继续下去,也就是说按格式化之后硬盘的空间从大到小格式化一定不劣。

那么我们就能轻松解决此题了。

时间复杂度:$\Theta(n\log n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec{int a,b;}e[2000001],q1[2000001],q2[20000001];
int n,t1,t2;
long long ans,now;
bool cmp1(rec a,rec b){return a.a<b.a;}
bool cmp2(rec a,rec b){return a.b>b.b;}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&e[i].a,&e[i].b);
if(e[i].a<=e[i].b)q1[++t1]=e[i];
else q2[++t2]=e[i];
}
sort(q1+1,q1+t1+1,cmp1);
sort(q2+1,q2+t2+1,cmp2);
for(int i=1;i<=t1;i++)
{
now-=q1[i].a;
if(now<0)
{
ans-=now;now=q1[i].b;
}
else now+=q1[i].b;
}
for(int i=1;i<=t2;i++)
{
now-=q2[i].a;
if(now<0)
{
ans-=now;now=q2[i].b;
}
else now+=q2[i].b;
}
printf("%lld",ans);
return 0;
}

rp++

[CSP-S模拟测试]:格式化(贪心)的更多相关文章

  1. csp-s模拟测试95

    csp-s模拟测试95 去世场祭. $T1$:这不裸的除法分块吗. $T2$:这不裸的数据结构优化$Dp$吗. $T3$:这不裸的我什么都不会搜索骗$30$分吗. 几分钟后. 这除法分块太劲了..(你 ...

  2. csp-s模拟测试99

    csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...

  3. csp-s模拟测试92

    csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...

  4. csp-s模拟测试85

    csp-s模拟测试85 $T1$全场秒切没有什么区分度,$T2$全场成功转化题意但是我并不会打,$T3$暴力都没打很遗憾. 100 00:21:49 02:56:35 02:56:49 135 02: ...

  5. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  6. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  7. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  8. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

  9. 安装nginx python uwsgi环境 以及模拟测试

    uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...

随机推荐

  1. HDU-1204-糖果大战

    题目描述 生日\(Party\)结束的那天晚上,剩下了一些糖果,\(Gandon\)想把所有的都统统拿走,\(Speakless\)于是说:"可以是可以,不过我们来玩\(24\)点,你不是已 ...

  2. ExpressionToSQL

    ExpressionToSql using System; using System.Collections.Generic; using System.Collections.ObjectModel ...

  3. 说说 MicroPython 的项目整体架构

    今天来说说 MicroPython 的架构情况,如果有必要我会做一些源码分析的文章供大家参考. 先来认识一下 MicroPython 整体情况,可以从软件的角度上去看待,首先我们拿到 MicroPyt ...

  4. 深入理解java虚拟机(2)

    一.对象的访问 ----------------------------------------------------- 1.对象的访问与java栈.堆和方法区之间的关联关系. eg:Object ...

  5. hadoop面试复习笔记(1)

    0.Mappereduce采用的是Master/Slaves模型 1.Hadoop是一个开源软件框架,支持支持大数据集的存储和处理.Apache Hadoop是存储和处理大数据的解决方案你是因为: ( ...

  6. 面向新手的Web服务器搭建(一)——IIS的搭建

    很多童鞋说自己是做移动开发的,想挂个简单的Web API,可是服务器又不会搭,这样一来测试就成了问题.看看网上的教程,发现略难懂,而且大多是一个转一个,没价值,所以干脆写几篇文章讲讲简单的Web服务器 ...

  7. wpf Textbox 回车就换行

    将 TextWrapping 属性设置为 Wrap 会导致输入的文本在到达 TextBox 控件的边缘时换至新行,必要时会自动扩展 TextBox 控件以便为新行留出空间. 将 AcceptsRetu ...

  8. Delphi 7的特点

  9. Librepilot-Windows编译环境的搭建

      1.安装Msys2 下载Msys2,下载地址 https://msys2.github.io,注意根据笔记本的型号选择32bit或64bit. 2.添加LibrePilot MinGW库 在 /e ...

  10. mongodb,robomongo 数据查询

    可视化管理工具:Robomongo 是开源,免费的MongoDB管理工具,下载地址:Robomongo下载 1.  基本查询:    构造查询数据.    > db.test.findOne() ...