[BZOJ2600] ricehub
问题描述
乡间有一条笔直而长的路称为“米道”。沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数。这些稻田按照坐标以不减的顺序给出,即对于 0 ≤ i <R,稻田 i 的坐标 X[i]满足 1 ≤ X[0] ≤ ... ≤ X[R-1] ≤ L。 注意:可能有多块稻田位于同一个坐标上。
我们计划建造一个米仓用于储存尽可能多的稻米。和稻田一样,米仓将建在米道上,其坐标也是一个 1 到 L 之间的整数(含 1 和 L)。这个米仓可以建在满足上述条件的任一个位置上,包括那些原来已有一个或多个稻田存在的位置。
在收获季节,每一块稻田刚好出产一滿货车的稻米。为了将这些稻米运到米仓,需要雇用一位货车司机来运米。司机的收费是每一满货车运送一个单位的距离收取 1 元。換言之,将稻米从特定的稻田运到米仓的费用在数值上等于稻田坐标与米仓坐标之差的绝对值。 不幸的是,今年预算有限,我们至多只能花费 B 元运费。你的任务是要帮我们找出一个建造米仓的位置,可以收集到尽可能多的稻米。
输入格式
第一行 三个整数 R L B
接下来R行 每行一个整数 表示X[i]
输出格式
一个整数 最多稻米数
样例输入
5 20 6
1
2
10
12
14
样例输出
3
数据范围
1 ≤ R ≤ 100,000
1 ≤ L ≤ 1,000,000,000
0 ≤ B ≤ 2,000,000,000,000,000
解析
设选的点坐标为a,则问题是求在满足\(\sum_{i=l}^{r}|x_i-a|<=B\)时\(r-l+1\)的最大值。计算绝对值之和可以用中位数解决。我们可以从左往右枚举每个点作为r时满足条件的最大的区间,即当\([l,r]\)不满足条件时将\(l\)往前移动直至满足条件。用一个指针即可。注意每移动一次都要更新中位数。
代码
#include <iostream>
#include <cstdio>
#define N 200002
#define int long long
using namespace std;
int l,r,b,i,L=1,R,x[N],sumr[N],suml[N];
signed main()
{
cin>>r>>l>>b;
for(i=1;i<=r;i++) cin>>x[i];
for(i=2;i<=r;i++) suml[i]=suml[i-1]+x[i]-x[i-1];
for(i=r-1;i>=1;i--) sumr[i]=sumr[i+1]+x[i+1]-x[i];
for(i=2;i<=r;i++) suml[i]+=suml[i-1];
for(i=r-1;i>=1;i--) sumr[i]+=sumr[i+1];
int ans=0;
for(R=1;R<=r;R++){
int mid=L+(R-L+1)/2;
while(suml[R]-suml[mid]-(R-mid)*(x[mid]-x[1])+sumr[L]-sumr[mid]-(mid-L)*(x[r]-x[mid])>b){
L++;
mid=L+(R-L+1)/2;
}
ans=max(ans,R-L+1);
}
cout<<ans<<endl;
return 0;
}
[BZOJ2600] ricehub的更多相关文章
- bzoj2600 [Ioi2011]ricehub
Description 乡间有一条笔直而长的路称为“米道”.沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ...
- 【bzoj2600】[Ioi2011]ricehub 双指针法
题目描述 给出数轴上坐标从小到大的 $R$ 个点,坐标范围在 $1\sim L$ 之间.选出一段连续的点,满足:存在一个点,使得所有选出的点到其距离和不超过 $B$ .求最多能够选出多少点. $R\l ...
- 【bzoj2600】 [Ioi2011]ricehub
如果发现尾指针到头指针这段稻田的中位数上建一个粮仓时距离之和超过了B 就调整尾指针对距离维护一个前缀和 每次取中位数之后可以O(1)计算距离和 #include<algorithm> #i ...
- bzoj2600 [Ioi2011]ricehub 双指针
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2600 题解 随便写一个比较简单的 two pointers 练习题. 首先答案肯定是一个原序列 ...
- [bzoj2600][Ioi2011]ricehub_二分
ricehub bzoj-2600 Ioi-2011 题目大意:在数轴上有r块稻田,稻田坐标为整数.计划建造一个米仓,使得它可以收取尽量多的稻米.米仓的坐标仍需为整数.每一块权值为val的稻田距离米仓 ...
- BZOJ 2600: [Ioi2011]ricehub
2600: [Ioi2011]ricehub Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 628 Solved: 325[Submit][Stat ...
- bzoj 2600 ricehub
2600: [Ioi2011]ricehub Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 783 Solved: 417[Submit][Stat ...
- [IOI 2011]ricehub
Description 乡间有一条笔直而长的路称为“米道”.沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ...
- [Ioi2011]ricehub
Description 乡间有一条笔直而长的路称为“米道”.沿着这条米道上 R 块稻田,每块稻田的坐标均 为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ...
随机推荐
- C++新旧类型转换小记
旧式类型转换可应对一切转换,不管合不合理,有没有风险,你让我转我就转给你,后果自负. 新式类型转换比较安全,主要体现在父子类之间的运行时转换 dynamic_cast上,若转换失败则返回空指针,而旧式 ...
- hypermesh中怎么设置支反力(反作用力)
Analysis page >> Control cards >> Global output request 勾选 SPCF 和 GPFORCE .
- AtomicBoolean 源码分析
AtomicBoolean AtomicBoolean 能解决什么问题?什么时候使用 AtomicBoolean? 可原子更新的 boolean 值 1)原子性:在Java中,对基本数据类型变量的读取 ...
- Html.Partial和Html.RenderPartial和Html.RenderAction区别
1.Html.Partical 把View页或模板解析成字符串然后输出到渲染页面上 @Html.Partical("viewxxx") 2.Html.RenderPartical则 ...
- img下面出现了蜜汁空白
这段时间一直在做老师不值得的手机端的网页,在给元素设置宽度的时候都是使用百分比的形式,后来知道,这就是流体布局.不过这些都是后话,下面说的是在做静态手机站的时候遇到的一个问题. 因为使用了流体布局,几 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第2节 抽象类_14-抽象的概念
先来了解什么叫做抽象 父类有个计算面积的方法,但是不同的图形计算面积的方式是不一样的.所以这里的计算面积的方法就是个抽象的方法. 只有到具体的子类里面才能去实现具体的计算面积的方法 动物类是父类.有吃 ...
- 解决Nginx反向代理不会自动对特殊字符进行编码的问题 如gitblit中的~波浪线
问题起因是利用Nginx做反向代理的时候,需要访问如下链接http://192.168.14.141/iserver/services/3D-0524hd/rest/realspace/datas/0 ...
- Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍
Shell中的特殊字符有 1.$ 美元符 2.\ 反斜杠 3.` 反引号 4." 双引号 5.< ,>;,*,?,[,] 下面我一一举列说明 一.$符号 1.echo $? 显示 ...
- Babel编译:动态计算的属性名
ES2015允许使用表达式作为属性名. 编译前: const HELLO = 'hello'; let dog = { [HELLO](){ console.log('hello'); } } 编译后 ...
- 【MM系列】SAP MM模块-基础配置第一篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-基础配置第一篇 ...