Description

乡间有一条笔直而长的路称为“米道”。沿着这条米道上 R 块稻田,每块稻田的坐标均
为一个 1 到 L 之间(含 1 和 L)的整数。这些稻田按照坐标以不减的顺序给出,即对于 0 ≤ i <
R,稻田 i 的坐标 X[i]满足 1 ≤ X[0] ≤ ... ≤ X[R-1] ≤ L。 
注意:可能有多块稻田位于同一个坐标上。 
我们计划建造一个米仓用于储存尽可能多的稻米。和稻田一样,米仓将建在米道上,其
坐标也是一个 1 到 L 之间的整数(含 1 和 L)。这个米仓可以建在满足上述条件的任一个位
置上,包括那些原来已有一个或多个稻田存在的位置。 
在收获季节,每一块稻田刚好出产一滿货车的稻米。为了将这些稻米运到米仓,需要雇
用一位货车司机来运米。司机的收费是每一满货车运送一个单位的距离收取 1 元。換言之,
将稻米从特定的稻田运到米仓的费用在数值上等于稻田坐标与米仓坐标之差的绝对值。 
不幸的是,今年预算有限,我们至多只能花费 B 元运费。你的任务是要帮我们找出一个
建造米仓的位置,可以收集到尽可能多的稻米。

Input

第一行 三个整数 R L B
接下来R行 每行一个整数 表示X[i]

Output

一个整数 最多稻米数

Sample Input



5 20 6

1

2

10

12

14

Sample Output



3

HINT

1 ≤ R ≤ 100,000

1 ≤ L ≤ 1,000,000,000

0 ≤ B ≤ 2,000,000,000,000,000
解析:其实去画一画或想一下就会发现,米仓在两个稻田间的任意位置,两个稻田的运费之和都相等,那么我们不如直接考虑将它建在哪一块稻田上。
二分枚举稻田数x,然后用一个for循环来枚举我们所假想收割的x个稻田中最左边的那个稻田位置为l,然后通过x推出r,mi(最右边的位置和中间位置)。谷仓在中间时为最优解(这个自己去试试画出来想)所以谷仓位置为mi。好啦那么我们枚举的这段区间的费用是多少呢?可能很多人会和我一样第一反应是用一个for循环来计算,可是之前的枚举已经是O(nlogn)了,这就决定了我们的计算最好复杂度为O(1)。我们用前缀和来实现。首先设费用为sum,f为一个数组,这个数组中f[i]储存的是1~i块稻田的坐标和,a数组用来储存每块稻田的坐标,设一个变量now来表示米仓的坐标(就是a[now]),则公式为:
  sum=now*(mi-l)-(f[mi-1]-f[l-1])+(f[r]-f[mi])-now*(r-mi); 
为什么这么做呢,下面来解释一下。
我们需要把区间分成左右两边来做,左边的费用等于=now-a[l]+now-a[l+1]+now-a[l+2]+....+now-a[mi-1];我们可以发现他是有多个now-a[?]组合而成,有几项呢?不拿算出总共有mi-l(不是数字1是L!)项,则式子变为=now*(mi-l)-(a[l]+a[l+1]+a[l+2]+....+a[mi-1]);好啦那么a[l]+..+a[mi-1]即为第l块稻田到第mi-1块稻田的坐标之和,完全可以用前缀和直接表示成f[mi-1]-f[l-1],好啦左边的式子最终成为:now*(mi-l)-(f[mi-1]-f[l-1]),同理右边的式子也可以这样推出来(不写啦)。
算出sum后只要比B元小,就成立了,否则不成立。
程序:

#include<iostream>
#include<cstdio>
using namespace std;
],now,k,ans,a[],sum,n,l,b,lef,righ,mid;
bool check(long long x)
{
  int i,l,r,mi;
  ;i<=n-x+;++i)
  {
      l=i;(最左边的稻田) r=i+x-(最右边的稻田); mi=(l+r)/(米仓);
      now=a[mi];(米仓坐标)
      sum=now*(mi-l)-(f[mi-]-f[l-])+(f[r]-f[mi])-now*(r-mi);
(式子的具体推法已经写在上面了)
      if (sum<=b) return true;
  }
  return false;
}
int main()
{
  cin>>n>>l>>b;
 ;i<=n;++i) cin>>a[i];
 f[]=;
 ;i<=n;++i) f[i]=f[i-]+a[i];(前i个稻田的坐标之和)
 lef=;
 righ=n+;
 ans=;
 while (lef<=righ) (枚举有几块稻田能收割)
 {
     mid=(lef+righ)/;
     if (check(mid)==true)
     {
      lef=mid+;
      if (ans<mid) ans=mid;
     }
        ;
  }
  cout<<ans<<endl;
  ;
}

好啦好啦。

 

2600: [Ioi2011]ricehubh的更多相关文章

  1. BZOJ 2600: [Ioi2011]ricehub

    2600: [Ioi2011]ricehub Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 628  Solved: 325[Submit][Stat ...

  2. lydsy 2600(二分+中位数前缀和)米仓

    2600: [Ioi2011]ricehub Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 691  Solved: 359[Submit][Stat ...

  3. BZOJ 2599: [IOI2011]Race( 点分治 )

    数据范围是N:20w, K100w. 点分治, 我们只需考虑经过当前树根的方案. K最大只有100w, 直接开个数组CNT[x]表示与当前树根距离为x的最少边数, 然后就可以对根的子树依次dfs并更新 ...

  4. Pi 前2600位

    3.14 15926 53589 79323 84626 43383 27950 28841 97169 39937 51058 2097 4944 5 92307 81640 62862 0899 ...

  5. bzoj2599: [IOI2011]Race(点分治)

    写了四五道点分治的题目了,算是比较理解点分治是什么东西了吧= = 点分治主要用来解决点对之间的问题的,比如距离为不大于K的点有多少对. 这道题要求距离等于K的点对中连接两点的最小边数. 那么其实道理是 ...

  6. BZOJ2599 [IOI2011]Race

    传送门 点分治,黄学长的选根方法会T掉,换了这个人的选根方法就可以了. 当然,你也可以选择黄学长的奇淫优化 //BZOJ 2599 //by Cydiater //2016.9.23 #include ...

  7. BZOJ2599——[IOI2011]Race

    0.题意:给一棵树,每条边有权.求一条路径,权值和等于K,且边的数量最小. 1.分析:水题一道,一波树分治就好 我们可以发现这个题的K是比较小的,才100w,那么我们可以树分治一下,在遍历每一棵子树的 ...

  8. [BZOJ2599][Race][IOI2011]点分治

    这是为了真正去学一下点分治..然后看了迪克李的ppt 又是一道写(改)了很久的题..终于ac了 1354799 orzliyicheng 2599 Accepted 31936 kb 23584 ms ...

  9. bzoj1758 [Wc2010]重建计划 &amp; bzoj2599 [IOI2011]Race

    两题都是树分治. 1758这题可以二分答案avgvalue,因为avgvalue=Σv(e)/s,因此二分后只需要判断Σv(e)-s*avgvalue是否大于等于0,若大于等于0则调整二分下界,否则调 ...

随机推荐

  1. Filter体现职责链模式

    1. 前言 Filter—Filter 技术是servlet2.3 新增加的功能.完成的流程:对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后 ...

  2. H TC並沒有成為下一個摩托羅拉或諾基亞。

    關於2014年第四季度,H T C在三季度財報說明中提到,“年度旗艦H T CO ne(M 8)與中端機型H T C D esire系列在競爭日趨激烈的智能手機市場保持穩定的銷售,市占率有所提升,延續 ...

  3. jQ1.5源码注释以及解读RE

    jQ作为javascript的库( ▼-▼ ), 尽善尽美, 代码优美,  值得学习.  这一周平常上班没啥事也看jQ1.5的代码, 今天周六差不多看完了(Sizzle部分还没看), 重新看了一下, ...

  4. js 刷新windows.open另一个窗口页面或window.open的页面如何刷新(父页面)上层页面

    一.js完整代码如下: //js打开新窗口 functionopenWin() {window.open('addInfo.jsp', '_blank','width=300,height=400,t ...

  5. JS原型链理解

    1. 每个对象都有原型属性(__proto__)2. 对象的原型(__proto__)指向其构造函数(Class)的prototype属性3. 构造函数(Class)的prototype属性本身也是一 ...

  6. JS,html压缩及混淆工具

    现在已经出现了不少有自己特色的: JSMin Javascript compressor Packer Closure Compiler YUI Compressor Pretty Diff Java ...

  7. Ecshop商品详情页显示当前会员等级价格

    会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格,在未登录状态下,则还默认显示原来的本店售价. 解决方法: 这个需要修改ECSHOP程序代码来实现. 打开文件 /in ...

  8. Web应用程序或者WinForm程序 调用 控制台应用程序及参数传递

    有时候在项目中,会调用一个控制台应用程序去处理一些工作.那在我们的程序中要怎么样做才能调用一个控制台应用程序并将参数传递过去,控制台程序执行完后,我们的程序又怎样获取返回值?代码如下:调用代码:    ...

  9. Ueditor配置及在项目中的使用

    引言 上篇中简单介绍了Ueditor的两种定制方式,想了解的请戳这里:Ueditor的两种定制方式.在项目中,Ueditor该怎么使用更方便呢?很容易让人想到将ueditor放入用户控件页,可以拖到需 ...

  10. Partial Tree---hdu5534(完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题意:有n个节点,让这n个节点形成一棵树,这棵树的种类有很多种,现在告诉n-1个f[i],表示度 ...