「AGC023D」 Go Home

传送门

神题。

首先我们可以倒着考虑。

当车到达最后一栋楼的时候,车上一定只有到这栋楼的员工。

当车到达倒数第二栋楼的时候,车上一定只有到达剩下两栋楼的员工。

设这两栋楼分别为 \(a,b\),且 \(x_a<x_b\)。如果当前公交车不在 \(a,b\) 之间,那么直接往一个方向移动肯定是最优秀的。否则,若 \(p_a>p_b\),则一定会先往 \(a\) 的方向移动。

当车到达倒数第三栋楼的时候,车上一定只有到达剩下三栋楼的员工。

设这三栋楼分别为 \(a,b,c\),且 \(x_a<x_b<x_c\)。如果当前公交车不在 \(a,c\) 之间,那么直接往一个方向移动肯定是最优秀的。

否则会有一类很特殊的情况:有汽车在 \(a,b\) 之间,且 \(p_a>p_c,p_a<p_b+p_c\)。这个时候如果 \(c\) 把票投给向自己家的方向,反而会使自己到家的时间变晚——汽车会先向 \(c\) 方向走,再到达 \(a\) 楼,最后到达 \(c\) 楼。

所以 \(c\) 一定会把票投给向 \(a\) 方向走。

我们发现这等价于把 \(c\) 楼的人全部看作 \(a\) 楼的人,然后再加上公交车到 \(a\) 楼的路程,使公交车移动到 \(a\) 楼。

然后你会发现我们上面分析的过程可以通过递归来实现,然后这个题就做完了。

/*---Author:HenryHuang---*/
/*---Never Settle---*/
/*---Never Enough---*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
ll x[maxn],p[maxn];
ll n,s;
ll calc(ll l,ll r,ll t){
if(s<x[l]) return x[r]-s;
if(x[r]<s) return s-x[l];
if(p[l]>=p[r]){
p[l]+=p[r];
return calc(l,r-1,l)+(t==r?x[r]-x[l]:0);
}
else{
p[r]+=p[l];
return calc(l+1,r,r)+(t==l?x[r]-x[l]:0);
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>s;
for(int i=1;i<=n;++i){
cin>>x[i]>>p[i];
}
cout<<calc(1,n,p[1]>=p[n]?n:1)<<'\n';
return 0;
}

最新文章

  1. UWP学习记录6-设计和UI之控件和模式3
  2. Beginning Scala study note(3) Object Orientation in Scala
  3. @autowired和@resource的区别
  4. mac 命令行批量删除.svn[转]
  5. oracle11g 拆分字符串的详细技巧
  6. 【Cocos2d-X开发学习笔记】第18期:动作类之改变动作对象、函数回调动作以及过程动作的使用
  7. cv::mat转换成QImage的问题
  8. 使用JDBC连接数据库(一)
  9. .netcore2.1 使用postgresql数据库,不能实现表的CRUD问题
  10. 网络安装Centos x64 6.10
  11. hbase的一些要点
  12. 二叉查找树ADT
  13. AX_InventDim
  14. rsync简介与rsync+inotify配置实时同步数据
  15. 一道面试题(C语言)
  16. Linux&#160;学习笔记之超详细基础linux命令&#160;Part&#160;4
  17. 【做题】CF239E. k-d-sequence——线段树
  18. [C#]App.Config
  19. spring Mvc Web 编码相关 [model 到 视图传递数据] (九)
  20. Android 演示 DownloadManager&mdash;&mdash;Android 下载 apk 包并安装

热门文章

  1. 浅谈:Redis持久化机制(一)RDB篇
  2. 达梦数据库产品支持技术学习分享_Week2
  3. Jmeter- 笔记3 - Jmeter录制功能 / 抓包
  4. 关于LSTM核心思想的部分理解
  5. CVPR2019论文观察:感知边缘检测的双向级联网络
  6. 并发王者课-铂金1:探本溯源-为何说Lock接口是Java中锁的基础
  7. WordPress简介
  8. 【NX二次开发】Block UI 指定方位
  9. 深入理解Java中的反射机制和使用原理!详细解析invoke方法的执行和使用
  10. k8s-nginx二进制报Illegal instruction (core dumped)