「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;
}

「AGC023D」 Go Home的更多相关文章

  1. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  2. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  3. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  4. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  5. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  6. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  7. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  8. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

  9. 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance

    提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...

随机推荐

  1. 韩小韩 API接口

    官方网址:https://api.vvhan.com/ 天气API接口: https://api.vvhan.com/api/weather Bing每日图片API接口: https://api.vv ...

  2. Scrapy中的错误

    TabError: Inconsistent use of tabs and spaces in indentation 需要将  .py  文件中的使用 tab 做的空格符删掉,打成空格符.任何一个 ...

  3. Sql server 多列去重复值,相同的只显示一条数据

    CREATE TABLE #tp( headerNo VARCHAR(10), machineNO VARCHAR(10), descrption nVARCHAR(20), artNo VARCHA ...

  4. TensorFlow编程结构

    TensorFlow编程结构 TensorFlow 与其他编程语言非常不同. 首先通过将程序分为两个独立的部分,构建任何拟创建神经网络的蓝图,包括计算图的定义及其执行.起初这对于传统程序员来说看起来很 ...

  5. CUDA C++编程手册(总论)

    CUDA C++编程手册(总论) CUDA C++ Programming Guide The programming guide to the CUDA model and interface. C ...

  6. 【NX二次开发】PMI线性标注

    PMI线性标注,二次开发的难点在于控制尺寸的位置,多花点儿时间都能搞出来,想走捷径最下面就是源码. 只需要摆好工作坐标,然后指定你要标注尺寸的两个点,就可以很方便得利用这个封装函数做出你想要的PMI. ...

  7. iis配置代理服务器解决跨域问题

    iis配置代理服务器解决跨域问题 解决:在发布的项目根目录添加web.config配置文件 在配置文件中system.webServer节点中加入 <?xml version="1.0 ...

  8. 液晶显示系列(2)之黑色背景的PPT更省电环保吗?常黑与常白型LCD

    原文地址点击这里: 数年前听过一个培训师讲课,他的电脑课件PPT背景颜色是黑色的?美其名曰:黑色省电环保!当时讲台下听课的那些菜鸟们(也包括区区在下)深以为然,不由得心中竖起大拇指:这老师有水平,境界 ...

  9. ffmpeg-入门介绍(笔记)

    一.FFmpeg的基本组成 目前,ffmpeg有7大库,分别为AVFormat, AVCodec, AVFilteer, AVDecoder, AVUtil,Swresample, Swscale,A ...

  10. 百炼3752:走迷宫--栈实现dfs

    3752:走迷宫 总时间限制:  1000ms 内存限制:  65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最 ...