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),表示括号序列的 ...
随机推荐
- Lucene的分词_中文分词器介绍
Paoding:庖丁解牛分词器.已经没有更新了. MMSeg:搜狗的词库. MMSeg分词器的一些截图: 步骤: 1.导入包 2.创建的时候使用MMSegAnalyzer分词器
- 在jupyter notebook 中编辑公式
jupyter notebook是一个python的交互式开发环境,广泛应用于数据分析的场景下. 在jupyter notebook中,还可以很方便的编辑数学公式. 1.Markdown状态 编辑公式 ...
- matplotlib多种绘图方式
目录 散点图 条形图 直方图 总结 散点图 假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律? a = [1 ...
- C++——"%"运算符
基本介绍 r=a%b,余数的取值范围为-b+1~b-1,符号与a一致 要想得到0~b-1的余数,可以用:(a%b+b)%b 数位拆解 方法一:反复的:%10,/10 sizea = 0; while ...
- BNUOJ 26229 Red/Blue Spanning Tree
Red/Blue Spanning Tree Time Limit: 2000ms Memory Limit: 131072KB This problem will be judged on HDU. ...
- 2-sat相关知识
转载:http://blog.csdn.net/luyuncheng/article/details/15172827 此题好纠结啊...其实2-sat关键是建边 此题网上好多题解都是直接说了建边而且 ...
- 【springmvc】传值的几种方式&&postman接口测试
最近在用postman测试postman接口,对于springmvc传值这一块,测试了几种常用方式,总结一下.对于postman这个工具的使用也增加了了解.postman测试很棒,有了工具,测试接口, ...
- 上传文件表单file,限制上传文件类型的方法--参数accept
我们使用<input type="file" />来上传文件,但是当你只想要上传某种格式的文件,比如说(jpg)文件时.可以通过accept来限制. <form& ...
- [NOIP2007] 提高组 洛谷P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 【BZOJ2142】礼物(扩展lucas定理,中国剩余定理合并方程)
题意:有n件礼物,m个人,每个人分别需要w[i]件礼物,求分礼物的不同方案数 mod P 提示:设P=p1^c1 * p2^c2 * p3^c3 * … *pt ^ ct,pi为质数. 1≤n≤10^ ...