bzoj 2153: 设计铁路
2153: 设计铁路
Time Limit: 5 Sec Memory Limit: 259 MB
Submit: 295 Solved: 172
[Submit][Status][Discuss]
Description
A省有一条东西向的公路经常堵车,为解决这一问题,省政府对此展开了调查。调查后得知,这条公路两侧有很多村落,每个村落里都住着很多个信仰c教的教徒,每周日都会开着自家的车沿公路到B地去“膜拜”他们的教主,这便是堵车的原因。详细调查显示:这里总共有N个村落,并且它们都在B地的东边。编号为i的村落住有Ri个信仰c教的教徒,距离B地的距离为Ti(单位:公里)。为解决这一问题,A省政府决定在这条公路下修建一条地下快速铁路来缓解交通,并沿线修建若干个车站(B地会修建终点站,不算车站)。每名教徒都会先往B地方向开车(如果他所在村庄处恰好有车站就不必开车了),到最近的一个快速铁路车站时换乘(如果直接开到B地就不用换乘了),再通过快速铁路到B地。但A政府遇到一个难题:修建多少个车站以及在哪修建车站。一个修建车站的方案中,如果修建过多的车站则会花费过多的钱,但修建的车站少了或者修建的位置不对又会导致公路的拥堵。A政府为了协调这两方面,采用评分的方式来衡量一个方案的好坏(分数越大方案越坏):每修建一个车站会增加m的分数,在某一次“膜拜”中(只考虑去,不考虑返回),每导致1个教徒开车行驶1公里会增加1分。现请你设计一个修建车站的方案,使得分数最小。请输出这个最小的分数。
Input
输入的第一行包含两个正整数n、m。之后n行每行两个正整数Ti、Ri。
Output
输出一个整数,表示最小的分数。
Sample Input
4 20
25 3
5 3
25 2
20 5
【样例输入2】
4 30
25 3
5 3
25 2
20 5
Sample Output
55
【样例输出2】
70
【样例说明】
样例1中,在距B地20km处和距B地25km处修建车站,1、3、4号村落里的教徒就不必开车了,得分20*2=40分。2号村落里的教徒直接开车到B地,得分3*5=15分。总共得分55分。
样例2中,在距B地20km处修建车站,4号村落里的教徒就不必开车了,得分30分。1号和3号村落里的教徒先开车到距B地20km处的车站,得分3*5+2*5=25分。2号村落里的教徒直接开车到B地,得分3*5=15分。总共得分70分。
【数据规模】
对于100%的数据,n<=40000,m<=2000000000,Ti<=1000000,Ri<=1000。
提示:请注意使用64位整型存储某些数据和结果。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define maxn 40005
struct node{
ll x,y;
node operator -(const node &u)const{
return (node){x-u.x,y-u.y};
}
bool operator <(const node &u)const{
return x<u.x;
}
}a[maxn],q[maxn],point;
ll n,m,RT[maxn],T[maxn],R[maxn];
ll f[maxn],XL,hd,tl; inline ll calc(node x,ll xl){
return x.y-x.x*xl;
} inline double getxl(node x,node y){
return (y.y-x.y)/(double)(y.x-x.x);
} inline void solve(){
q[hd=tl=1]=(node){0,0};
for(int i=1;i<=n;i++){
XL=R[i-1];
while(hd<tl&&calc(q[hd],XL)>=calc(q[hd+1],XL)) hd++;
f[i]=calc(q[hd],XL)+m+RT[i-1]; point=(node){T[i],f[i]-RT[i]+T[i]*R[i]};
while(hd<tl&&getxl(q[tl],point)<=getxl(q[tl-1],q[tl])) tl--;
q[++tl]=point;
}
} int main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&a[i].x,&a[i].y);
}
sort(a+1,a+n+1),n++;
for(int i=1;i<=n;i++){
R[i]=R[i-1]+a[i].y;
T[i]=a[i].x;
RT[i]=RT[i-1]+a[i].x*a[i].y;
}
T[n+1]=1<<30;
solve();
printf("%lld\n",f[n]-m);
return 0;
}
bzoj 2153: 设计铁路的更多相关文章
- 「BZOJ2153」设计铁路 - 斜率DP
A省有一条东西向的公路经常堵车,为解决这一问题,省政府对此展开了调查. 调查后得知,这条公路两侧有很多村落,每个村落里都住着很多个信仰c教的教徒,每周日都会开着自家的车沿公路到B地去"膜拜& ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- UML建模工具
UML:Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段 ...
- IDDD 实现领域驱动设计-理解领域和子域
上一篇:<IDDD 实现领域驱动设计-一个简单业务用例的回顾和理解> 在<实现领域驱动设计>第二章的前半部分内容中,提到领域和子域的概念,并且作者把这两者又进行了细致的区分,其 ...
- IDDD 实现领域驱动设计-SOA、REST 和六边形架构
上一篇:<IDDD 实现领域驱动设计-架构之经典分层> 阅读目录: SOA-面向服务架构 REST 与 RESTful 资源(Resources) 状态(State) 六边形架构 DDD ...
- [专业名词·硬件] 2、DC\DC、LDO电源稳压基本常识(包含基本原理、高效率模块设计、常见问题、基于nRF51822电源管理模块分析等)·长文
综述先看这里 第一节的1.1简单介绍了DC/DC是什么: 第二节是关于DC/DC的常见的疑问答疑,非常实用: 第三节是针对nRF51822这款芯片电源管理部分的DC/DC.LDO.1.8的详细分析,对 ...
- BZOJ 2080: [Poi2010]Railway 双栈排序
2080: [Poi2010]Railway Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 140 Solved: 35[Submit][Statu ...
- BZOJ 1003 物流运输 题解 【SPFA+DP】
BZOJ 1003 物流运输 题解 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的 ...
- 【BZOJ】【1020】【SHOI2008】安全的航线flight
计算几何/二分/迭代/搜索+剪枝 写三个tag可能是因为从哪个方向来理解都可以吧…… 我完全不会计算几何所以抄了ydc的代码 题解:http://ydcydcy1.blog.163.com/blog/ ...
随机推荐
- HDU-1241-油藏
这题一道深搜的简单题目,其实题目的思路就只是向八个方向搜索,然后把整个油田遍历一遍即可. #include <cstdio> #include <cstring> int ma ...
- 【php】 自带的过滤机制
<?php print_r(filter_list()); ?> 输出类似: Array ( [0] => int [1] => boolean [2] => float ...
- 模块导入及使用,关键字,模块搜索路径,python文件的两种用途
06.05自我总结 一.模块导入及使用 1.模块导入的两种方式 我们拿time模块并使用其中的time功能进行举例 a)第一种 import time print(time.time) import首 ...
- python学习第一天 计算机基础知识
目录 什么是编程语言 什么是编程? 为什么要编程? 计算机5大组成分别有什么作用? qq启动的流程? 建议相关学习 课外 什么是编程语言 什么是编程语言? python和中文.英语一样,都是一门语言, ...
- rootfs注册挂载过程分析
参考:Linux Filesystem: 解析 Linux 中的 VFS 文件系统机制 主要代码, init_rootfs(); init_mount_tree(); 1.init_rootfs()解 ...
- '>>' should be '> >' within a nested template argument list
在编译关于opencv相机标定的工程的时候出现了这个问题 vector<vector<Point3f>> objectPoints; error: 'objectPoint ...
- 【SaltStack】一些常用模块举例
一.用户和用户组模块 说明:该sls文件用来在Minion端创建nginx用户和nginx用户组,当创建nginx用户时,对nginx用户组是否已存在做判断! (1) /srv/salt/creat ...
- Django的中间件及WSGI
什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的 ...
- django基础(web框架,http协议,django安装)
学习Django之前我们先来看什么是OSI七层模型: 应用层 表示层 应用层(五层模型中把这三层合成一个应用层) http协议 会话层 传输层 提供端口对 ...
- js-dom-EventUtil
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...