bzoj4619
4619: [Wf2016]Swap Space
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 129 Solved: 54
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
11 82
98 12
78 53
15 10
41 2
81 58
53 42
30 41
25 39
20 54
Sample Output
HINT
Source
二分+贪心
做法:先按加血扣血分类,加血的按a升序,扣血的按b降序。二分答案,模拟一遍即可(其实还有线性的,但是我懒得写)
证明:看了看黄学长的证明
对于加血的,假设交换相邻两项x[i],x[i+1],有两种情况:
1.交换完不能继续,因为没有x[i]的加血,不足以删除x[i+1]
2.交换完能继续,那么交换和不交换不影响结果,因为交换这两项顺序不影响后面的操作
所以这样是最优的
对于扣血的,比较麻烦,但是对于一个初始的val,最终如果能完成,那么剩余的东西是确定的,于是我们把扣血的那部分倒过来做,那么和加血的就一样了,这样b就是加血,a就是扣血,反过来了,那么反回去就是b降序排列。
证毕
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
const ll inf = ;
struct data {
int l, r, delta;
} x[N];
int n;
bool cp(data i, data j) { return i.delta > j.delta; }
bool cp1(data i, data j) { return i.l < j.l; }
bool cp2(data i, data j) { return i.r > j.r; }
bool C(ll val)
{
for(int i = ; i <= n; ++i)
{
if(val < x[i].l) return false;
val += x[i].delta;
}
return true;
}
int main()
{
scanf("%d", &n);
for(int i = ; i <= n; ++i) scanf("%d%d", &x[i].l, &x[i].r), x[i].delta = x[i].r - x[i].l;
sort(x + , x + n + , cp);
int pos = ;
for(int i = ; i <= n; ++i) if(x[i + ].delta <= ) { pos = i; break; }
sort(x + , x + pos + , cp1); sort(x + pos + , x + n + , cp2);
ll l = , r = inf, ans = ;
while(r - l > )
{
ll mid = (l + r) >> ;
if(C(mid)) r = ans = mid; else l = mid;
}
printf("%lld\n", ans);
return ;
}
bzoj4619的更多相关文章
- 【BZOJ4619/3709】[Wf2016]Swap Space/[PA2014]Bohater 贪心
[BZOJ4619][Wf2016]Swap Space Description 你有许多电脑,它们的硬盘用不同的文件系统储存数据.你想要通过格式化来统一文件系统.格式化硬盘可能使它的容量发生变化.为 ...
- 【bzoj4619】[Wf2016]Swap Space 贪心
题目描述 你有许多电脑,它们的硬盘用不同的文件系统储存数据.你想要通过格式化来统一文件系统.格式化硬盘可能使它的容量发生变化.为了格式化,你需要买额外的硬盘.当然,你想要买容量最小的额外储存设备以便省 ...
- bzoj4619 4619: [Wf2016]Swap Space
传送门 分析 首先不难想到我们要先处理容量变大的再处理容量变小的 对于第一种情况我们自然要选择x小的先格式化,因为这个样暂时存储所需空间较小,可以使得情况更优 而第二种情况y先考虑,因为这样对总空间的 ...
- 【bzoj4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+背包dp
题目描述 给出 $n$ 个括号序列,从中选出任意个并将它们按照任意顺序连接起来,求以这种方式得到匹配括号序列的最大长度. 输入 第一行包含一个正整数n(1<=n<=300),表示括号序列的 ...
随机推荐
- UVA 227 周期串
题意: 给一个字符串,寻找最短的循环节 如abcabcabcabc以3为周期,也按6和12为周期. 分析: 因为循环节肯定是相等的,所以枚举串长度的所有约数的循环节再判断是否相等即可. 我的方法是枚举 ...
- SQL Server 2016 CTP3.2 开荒 Reporting Service 篇
仅仅是开荒资源页,反正过不了多久就会有新的CTP. 下面是MSDN I Tell you 提供的 不过是中文,个人不是很建议,因为现在大多的资源页都是英文的ed2k://|file|cn_sql_se ...
- WebLoad 解析服务器返回的JSON格式内容
服务器返回Json格式的响应内容经常是以 String (txt) 形式返回给客户端.客户端需要把 文本形式的内容还原为Json格式以进一步做处理(如,取得返回内容的一个值作为下个请求的一个输入).这 ...
- [luoguP3402] 最长公共子序列(DP + 离散化 + 树状数组)
传送门 比 P1439 排列LCS问题,难那么一点点,只不过有的元素不是两个串都有,还有数据范围变大,树状数组得打离散化. 不过如果用栈+二分的话还是一样的. ——代码 #include <cs ...
- hrbust 1840 (树状数组第k大) 删点使用
小橙子 Time Limit: 2000 MS Memory Limit: 32768 K Total Submit: 2(2 users) Total Accepted: 1(1 users) Ra ...
- 2.3 comparator(比较器)
1.comparator是java的一种机制,用来帮助我们给相同对象的不同属性排序 2.Comparable接口,是一个对象本身就已经支持自比较所需要实现的接口,如String,Integer自己就已 ...
- 【Eclipse+IntelliJ反编译】Eclipse/IntelliJ IDEA反编译查看源码及注释
怎么用IDE查看第三方jar包的源码和注释,IntelliJ IDEA自带反编译器,Eclipse装个插件即可,不能看注释就麻烦了,总不能去找API文档吧,现在终于掌握了,下面给出解决方案,供大家参考 ...
- mysql实现oracle序列
mysql实现oracle序列的方案1.建表,表结构为:drop table if exists sequence; create table sequence ( seq_name VARCHAR( ...
- Linux系统备份还原工具1(DD)(应用实例)
DD使用教程:http://www.cnblogs.com/EasonJim/p/7442223.html 以下实例没经过大量测试,可能在一些机器上不会有效. 一般围绕以下几点进行设置: 1.dd完后 ...
- ETL全量单表同步简述
ETL全量单表同步简述 1. 实现需求 当原数据库的表有新增.更新.删除操作时,将改动数据同步到目标库对应的数据表. 2. 设计思路 设计总体流程图如下: 注意点: 1.数据库合并时,选择正确的数据源 ...