[CSP-S模拟测试]:格式化(贪心)
题目传送门(内部题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模拟测试]:格式化(贪心)的更多相关文章
- csp-s模拟测试95
csp-s模拟测试95 去世场祭. $T1$:这不裸的除法分块吗. $T2$:这不裸的数据结构优化$Dp$吗. $T3$:这不裸的我什么都不会搜索骗$30$分吗. 几分钟后. 这除法分块太劲了..(你 ...
- csp-s模拟测试99
csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...
- csp-s模拟测试92
csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...
- csp-s模拟测试85
csp-s模拟测试85 $T1$全场秒切没有什么区分度,$T2$全场成功转化题意但是我并不会打,$T3$暴力都没打很遗憾. 100 00:21:49 02:56:35 02:56:49 135 02: ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- 安装nginx python uwsgi环境 以及模拟测试
uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...
随机推荐
- Java实现龟兔赛跑
闲极无聊,加上翻手机看到龟兔赛跑的词语,想到了可以通过java起两个线程来实现龟兔赛跑的实现. 代码实现其实很简单: 首先是乌龟类: 然后是兔子类: 最后是赛跑类: 接下里让我们看一下输出结果吧: 乌 ...
- 2015 四川省赛 C Censor(哈希 | KMP)
模式串为子串 KMP /* @author : victor */ #include <bits/stdc++.h> using namespace std; typedef long l ...
- source与./执行的区别
source与./执行的区别作用:使文件生效区别:1.source不需要文件有可执行(x)权限,而./需要文件有x权限,否则报错2.source执行是在当前shell中执行,./在当前shell的子s ...
- MySQL水平分表
业务表增长速度较快,单表数据较大,对表的读写有影响. 思路:化整为零,把单表拆解为多表,按指定的算法规则选择表. 好处:能大幅降低单表的数据,读写更快,同时分散了表数据, SQL语句也分散到不同的表中 ...
- 关于KMeans和range的使用
#!/usr/bin/python#-*-coding:utf-8-*-import numpy as npfrom sklearn.cluster import KMeansfrom scipy.s ...
- ES6拷贝方法
ES6 中对象拷贝方法: 方法一: Object.assign() // 对象浅拷贝, 复制所有可枚举属性 const obj1 = {a: 1}; const obj2 = {b: 2}; // c ...
- 关于jQuery获取不到动态添加的元素节点的问题
遇到问题: 当我获取 $("#art-list")页面元素后去在后面追加标签的时候(append),在下面用 $(selector) 获取刚刚添加的标签,发现怎么都获取不到. 问题 ...
- Windows PyCharm QtDesigner/pyuic5配置
QtDesigner 配置成功截图如下: C:\ProgramData\Anaconda3\Library\bin\designer.exe $FileDir$ pyuic5 配置成功截图如下: C: ...
- “12306”是如何支撑百万QPS的?
来源:掘金 作者:绘你一世倾城 链接:https://juejin.im/post/5d84e21f6fb9a06ac8248149 秒杀系统的艺术 12306抢票,极限并发带来的思考? 每到节假日期 ...
- Qualcomm_Mobile_OpenCL.pdf 翻译-9-OpenCL优化用例的学习
在这一章中,将会用一些例子来展示如何使用之前章节中讨论的技术来进行优化.除了一些小的简单代码片段的展示外,还有两个熟知的图像滤波处理,Epsilon滤波和Sobel滤波,将会使用之前章节中讨论的方法进 ...