JZOJ 4772. 运输妹子
2016-09-12 20:11
316 查看
Problem
Description
小轩轩是一位非同一般的的大农(lao)场(si)主(ji),他有一大片非同一般的农田,并且坐落在一条公路旁(可以认为是数轴),在他的农田里种的东西也非同一般——不是什么水稻小麦,而是妹子。在小轩轩的细心培育下,他的大片农田都要结出妹子啦!但是他的农田分布实在是太广阔了,他担心自己的妹子会令路过的人想入非非,于是他想要把所有农田上的妹子都集中到一个仓库里面,贮存起来。可是妹子太多,他叫来了一辆卡车,这辆卡车刚好可以装满一个农田的妹子,并且在满载的情况下,运满满一卡车妹子走1米的费用是1元。由于小轩轩技术精湛,他的每个农田产量都是一样的。即把一个农田的妹子都运到仓库费用为农田与仓库坐标差值的绝对值。理想很美好,但现实很残酷——小轩轩还没有想好在什么位置搭建他的仓库,而且他的运输费用是有限的。
请你帮忙计算一下,在什么位置搭建仓库,使得小轩轩能收获的妹子最多。(仓库的位置可与农田的位置重合,并且在公路长度范围内)。
Input
第一行三个正整数 N,L,W,分别表示农田个数、公路总长度、总钱数。接下来 N 行,每一行描述一个农田的坐标。(可能有多个农田位于同一位置)
Output
一个整数,小轩轩最多能够收藏多少个农田的妹子。Sample Input
5 23 184
6
14
18
22
Sample Output
3Data Constraint
对于 30% 的数据,N≤1000,L≤10000。对于 60% 的数据,N≤10000,L≤1000000。
对于 100% 的数据,N≤100000,L≤1000000000,W≤2000000000000000
Solution
我们二分答案ans,看看最优情况下能够用多少钱。显而易见,如果我们花最少的钱,那么最优情况就是选连续ans个农田,并且仓库在中位数上。我们枚举起点,设起点为l,终点为r,中位数为mid,花费就是(Σri=mid+1a[i]−a[mid]∗(r−mid))−(Σmidi=la[i]−a[mid]∗(mid−l+1))
Code
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #define N 100010 #define LL long long #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; LL n,l,r,mid,L,w,a ,sum ,ans; int i,j,k,t; bool ok(int x) { int i; LL temp,ll,rr,mmid; fo(i,1,n-x+1) { ll=i;rr=i+x-1; mmid=(ll+rr)/2; temp=((sum[rr]-sum[mmid])-a[mmid]*(rr-mmid))-((sum[mmid]-sum[ll-1])-a[mmid]*(mmid-ll+1)); if (temp<=w) return 1; } return 0; } int main() { scanf("%lld%lld%lld",&n,&L,&w); fo(i,1,n) scanf("%lld",&a[i]); sort(a+1,a+n+1); fo(i,1,n) sum[i]=sum[i-1]+a[i]; l=1;r=n; while (l<=r) { mid=(l+r)/2; if (ok(mid)) ans=mid,l=mid+1;else r=mid-1; } printf("%lld",ans); }
相关文章推荐
- 【NOIP2016提高A组模拟9.9】总结
- hihocoder 1252 2015北京赛区区域赛D
- java util :获取国家省份城市工具类
- 用for循环实现的菱形图案
- java之hashMap和hashTable的区别
- 对动态数组的操作与算法
- CSS选择器修改样式,及单独修改样式this.style.
- SQL language
- WEB前端 | HTML基础——(4)定位position
- CentOS 7.2下 RabbitMQ 安装记录
- JS函数参数都是按值传递的!
- Android Application类
- 时间复杂度和空间复杂度详解
- 2016.09.10 初中部 NOIP普及组 模拟赛
- YSlow团队的23条“Web性能最佳实践和规则”
- 今天我又get到那些Linux的命令
- 安卓App闪屏页及引导页的实现
- 用python编写的定向arp欺骗工具
- java 静态方法和单例模式的区别
- CSS简写总结