正题

题目链接:https://www.luogu.com.cn/problem/AT3955


题目大意

nnn个房子在一个坐标轴上,第iii个有pip_ipi​个人在位置xix_ixi​,开始所有人都在一辆在位置sss的车上,每一时刻,每个人都会投票决定车的走向,票多的赢,求最后一个人的回家时间。

注意每个人不一定会投回家的方向,有可能他会帮助其他乘客下车后再回家更优。


解题思路

我们考虑111和nnn哪个先回家,结论就是如果p1≥pnp_1\geq p_np1​≥pn​那么111一定先比nnn回家,反之同理。
证明的话就是如果往右走的票多那么等这些票下车后一定有一个时间使得左边比右边多,不然就是直接走右边。

所以这种情况下nnn一定比111晚,那么111早到家就意味着nnn早到家,那么nnn的人就会和111的人投票一样,所以我们可以相当于删去nnn,然后答案加上xn−x1x_n-x_1xn​−x1​且让p1+=pnp_1+=p_np1​+=pn​。一直递归下去即可。

时间复杂度O(n)O(n)O(n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10;
ll n,s,x[N],p[N],f[N],ans;
ll solve(ll l,ll r,ll last){if(s<x[l])return x[r]-s;if(s>x[r])return s-x[l];if(p[l]<p[r]){p[r]+=p[l];return solve(l+1,r,r)+((last==l)?(x[r]-x[l]):0);}else{p[l]+=p[r];return solve(l,r-1,l)+((last==r)?(x[r]-x[l]):0);}
}
int main()
{scanf("%lld%lld",&n,&s);for(ll i=1;i<=n;i++)scanf("%lld%lld",&x[i],&p[i]);printf("%lld\n",solve(1,n,(p[1]>=p[n])?n:1));
}

AT3955-[AGC023D]Go Home【结论,递归】相关推荐

  1. 《编译原理》实验报告——递归下降语法分析器的构建

    一.实验要求 运用递归下降法,针对给定的上下文无关文法,给出实验方案.预估实验中可能出现的问题. 二.实验方案 1.构造LL(1),通过设计.编制.调试递归下降语法分析程序,对输入的符号串进行分析匹配 ...

  2. 函数 java_java函数方法

    1.方法重载 (1)源代码 // MethodOverload.java // Using overloaded methods public class MethodOverload { publi ...

  3. mysql 单标递归_MySql整理篇之递归

    问题:Mysql递归实现 方式一:存储过程,方式二:函数 本文再其基础之上考研效率问题,只在乎实现的同学参考大侠的足矣,想继续提高效率的可继续阅读.再参考博文中,大侠已说明,推介方式二(函数)实现,下 ...

  4. 算法设计与分析之循环与递归

    前言: 循环与递归可以说是算法设计中最基本但却也是最重要的工具方法.循环和递归对于学习过高级程序设计语言的人来说都并不陌生,但还是有必要仔细的探究一下循环和递归之间的相似和区别.循环与递归最大的相似之 ...

  5. 循环神经网络 递归神经网络_如何用递归神经网络预测空气污染

    循环神经网络 递归神经网络 After the citizen science project of Curieuze Neuzen, I wanted to learn more about air ...

  6. PAT(甲级)2018年冬季考试 7-4 Heap Paths(非递归与递归解法)

    非递归解法 1. 前置知识:完全二叉树的属性 1.1 从1开始存储,子节点的下标除以二得到的是父节点的下标 1.2 数组的存放顺序刚好是层序遍历顺序 1.3 从1开始存储,节点的下标i和结点总数n如果 ...

  7. 看动画轻松理解“递归”与“动态规划”

    作者 | 程序员小吴 来源 | 五分钟学算法 在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知 ...

  8. 干货:一文彻底弄懂递归如何解题

    前言 递归是算法中一种非常重要的思想,应用也很广,小到阶乘,再在工作中用到的比如统计文件夹大小,大到 Google 的 PageRank 算法都能看到,也是面试官很喜欢的考点 最近看了不少递归的文章, ...

  9. 一直学不明白的「递归」与「动态规划」原来这么简单

    在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知识点. 程序员小吴打算使用动画的形式来帮助理解 ...

最新文章

  1. 独家 | ​数据科学家必知的五大深度学习框架!(附插图)
  2. 基于Android移动终端的微型餐饮管理系统的设计与实现3-技术整合
  3. 使用 diff 查找文件的差异并生成补丁文件修补
  4. Spring Cloud Stream同一通道根据消息内容分发不同的消费逻辑
  5. 戴尔推免费浏览器安全工具 可隔离恶意软件
  6. MyEclipse连接MySQL的方法
  7. Spring MVC,Ajax和JSON第2部分–服务器端代码
  8. SquashFs工具制作
  9. Angular 4.x Template-Driven Forms
  10. 计算机科学与技术毕业论文题目【115个】
  11. 手机上将mp4转换成amv_如何在Linux上将所有文本从大写转换为小写?
  12. lighttpd服务器404页修改,教你学会Lighttpd的安装配置
  13. 区块链具有的8种特性
  14. 第一篇 AlexNet——论文翻译
  15. 选择器:id与name
  16. 关于解决'\u'开头的字符串转中文的方法
  17. asp毕业设计——基于asp+access的校园网物品交易平台设计与实现(毕业论文+程序源码)——校园网物品交易平台
  18. Linux系统忘记密码解决办法
  19. Particle for alexa smart home skill (1)
  20. 张正友相机标定算法详解

热门文章

  1. 密封槽设计标准_哈尔滨轴承 | 超全面机械密封选型
  2. url采集工具_大数据关键技术浅谈之大数据采集
  3. filesystemwatch java_C#方法的委托和java中的回调
  4. c语言基类型,C语言基本类型边界值
  5. HTML坐标不随着屏幕大小改变,HTML热区map坐标,随窗口大小自适应办法(javascript)...
  6. 在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法
  7. oracle查询案例,2道经典的oracle查询案例
  8. python服务器qt客户端_python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例...
  9. 计算机等级delphi取消,计算机二级DELPHI控件:DELPHI过滤记录的实现方法
  10. java numberformat异常_Java NumberFormat格式化float类型的bug