文章目录

  • Part 0
  • 独木桥
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
  • Part 1
  • Part2
  • Part 3
    • 核心代码
  • Part 4
    • AC代码:

Part 0

独木桥

题目背景

战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒,因为这座独木桥十分狭窄,只能容纳 1 1 1 个人通过。假如有 2 2 2 个人相向而行在桥上相遇,那么他们 2 2 2 个人将无法绕过对方,只能有 1 1 1 个人回头下桥,让另一个人先通过。但是,可以有多个人同时呆在同一个位置。

题目描述

突然,你收到从指挥部发来的信息,敌军的轰炸机正朝着你所在的独木桥飞来!为了安全,你的部队必须撤下独木桥。独木桥的长度为 L L L,士兵们只能呆在坐标为整数的地方。所有士兵的速度都为 1 1 1,但一个士兵某一时刻来到了坐标为 0 0 0 或 L + 1 L+1 L+1 的位置,他就离开了独木桥。

每个士兵都有一个初始面对的方向,他们会以匀速朝着这个方向行走,中途不会自己改变方向。但是,如果两个士兵面对面相遇,他们无法彼此通过对方,于是就分别转身,继续行走。转身不需要任何的时间。

由于先前的愤怒,你已不能控制你的士兵。甚至,你连每个士兵初始面对的方向都不知道。因此,你想要知道你的部队最少需要多少时间就可能全部撤离独木桥。另外,总部也在安排阻拦敌人的进攻,因此你还需要知道你的部队最多需要多少时间才能全部撤离独木桥。

输入格式

第一行共一个整数 L L L,表示独木桥的长度。桥上的坐标为 1 , 2 , ⋯ , L 1, 2, \cdots, L 1,2,⋯,L。

第二行共一个整数 N N N,表示初始时留在桥上的士兵数目。

第三行共有 N N N 个整数,分别表示每个士兵的初始坐标。

输出格式

共一行,输出 2 2 2 个整数,分别表示部队撤离独木桥的最小时间和最大时间。 2 2 2 个整数由一个空格符分开。

样例 #1

样例输入 #1

4
2
1 3

样例输出 #1

2 4

提示

对于 100 % 100\% 100% 的数据,满足初始时,没有两个士兵同在一个坐标, 1 ≤ L ≤ 5 × 1 0 3 1\le L\le5\times 10^3 1≤L≤5×103, 0 ≤ N ≤ 5 × 1 0 3 0\le N\le5\times10^3 0≤N≤5×103,且数据保证 N ≤ L N\le L N≤L。


Part 1

当时我拿到这道题的时候第一眼就下意识觉得这道题肯定不用数组,也不用完全模拟转向的过程。

你看嘛,数据规模写着N、L都小于 5 ∗ p o w ( 10 , 3 ) 5*pow(10,3) 5∗pow(10,3),本来数据规模都够大了,如果再加上这道题什么转向、前进的复杂模拟与数组操作,肯定会TLE了。

所以,我们就要寻求一种复杂度较低的、没有或者较少数组操作的解题思路了。


Part2

想想看,如果你是敌军飞机上的人,视线垂直于独木桥,看到士兵撤退的过程是怎样的?

士兵们在桥上跑来跑去,一顿眼花缭乱的操作之后桥上就没人了。

如果只看两个人,那么你看到了什么?

两个人不停朝自己的方向前进,遇到之后两人没有停下,都继续前进。

他们二人的相遇在飞机上看起来就像是互相穿过了对方一样。

A是向右走的士兵,B是向左走的士兵。
他们相遇之后,A“代替”B向左走,B“代替”A向右走。

所以说这道题说的一大堆转向、前进、站在一个格子里其实与互相穿过没有区别。

无论如何,撤退的结束是以最后一个走下独木桥的士兵的撤退时间为准的。所以可以明确该怎么做。


Part 3

确定了解题思路,我们就要开始规划怎么做题了。

之前说了不用做数组,其实做法就是用一个变量,一边输入一边维护最大撤退时间和最小撤退时间。

用algorithm里的max(),min()函数取两个参数的最大和最小值。

在输入士兵位置的函数里,定义局部变量用于输入位置,这样就可以免去数组占用的不必要空间了。
一边输入一边维护。

一个士兵向左走,要走位置loc个单位长度,向右走,要走lon-loc+1个单位长度。

所以每次输入的时候都求一下这个士兵是向左走快还是向右走快,再把这个值与原来的最快值比较,取小的,存入最小撤退时间就行了。

如果是最大撤退时间,那么都反过来。

这就完成了一次维护。

核心代码

max_ = max(max_,max(loc,lon-loc+1));
min_ = min(min_,min(loc,lon-loc+1));

Part 4

AC代码:

#include <bits/stdc++.h>//万能头
using namespace std;//命名空间
int N;//存储士兵个数
int lon;//独木桥长度
int loc;//士兵位置
int max_=0;//最大(慢)撤离时间
int min_=0;//最小(快)撤离时间
int main()
{scanf("%d%d",&lon,&N);//输入for(int i=1;i<=N;i++)//循环1-N{scanf("%d",&loc);//输入士兵位置max_=max(max_,max(lon-loc+1,loc));//求取最大撤离时间min_=max(min_,min(lon-loc+1,loc));//求取最小撤离时间}printf("%d %d",min_,max_);//输出最小以及最大撤离时间return 0;
}

测试点信息:

PS:是QT的第一篇题解,对于题目的理解可能不太透彻,或者描述的不太清楚,请在评论区告诉我,谢谢!

[Luogu]P1007 独木桥(C++题解)相关推荐

  1. luogu P1007 独木桥

    二次联通门 : luogu P1007 独木桥 /*luogu P1007 独木桥模拟 */ #include <cstdio>inline int min (int a, int b) ...

  2. P1007 独木桥(贪心,模拟)

    P1007 独木桥 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 已知桥的长度L,桥上有n个士兵和所在位置,求部队离开独木桥的最短时间和最长时间 #include <iost ...

  3. c/c++ 洛谷 P1007 独木桥

    题目链接 洛谷 P1007 独木桥 不想戳的看下图 输入输出.样例.及数据范围 解题思路: 仔细考虑会发现,两个人相遇无论转不转身两个人所走的 总路程 都是一样的,那么时间也都一样,所以我们大可让两个 ...

  4. 洛谷P1007 独木桥 题解

    题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们.士兵 ...

  5. 【luogu P5022 旅行】 题解

    题目连接:https://www.luogu.org/problemnew/show/P5022 \(NOIP2018 DAY2T1\) 考场上只写了60分,很容易想到当 m = n - 1 时的树的 ...

  6. Luogu P2708 硬币翻转 题解

    Luogu p2708题解 思路: 由于我们这个题目的长度不知道,所以我们不能一次性输入所有的硬币的状态,也许会爆数组(Ps:我没试过我不是知道).所以我们为了保险采取用getchar()一个一个读入 ...

  7. 【luogu P2169 正则表达式】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2169 tarjan缩点 + SPFA 缩完点之后加边注意别写错. 也可以不用建两个图,可以在一张图上判断是否 ...

  8. 洛谷P1007 独木桥(贪心)

    文章目录 题目背景 题目描述 输入格式 输出格式 输入样例 输出样例 说明 分析 AC的C++代码 题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样 ...

  9. 洛谷P1007——独木桥 解法 (C++)

    Hi 又见面了呀 今天来一道洛谷的题 独木桥 先上个题目传送门(点击蓝字即可观看) 注:该博客已在2020年6月24日更新,更新内容:修复了一些由于字体原因导致的错误 题目背景 战争已经进入到紧要时间 ...

最新文章

  1. python使用什么注释语句和运算-Python基础之注释,算数运算符,变量,输入和格式化输出...
  2. 机器学习:数据预处理之独热编码(One-Hot)
  3. IntelliJ IDEA启动Tomcat控制台乱码问题解决
  4. 隐藏键盘_三星新专利:带有隐藏键盘的三折叠屏手机
  5. jbpm小项目测试_尝试使用jBPM Console NG(测试版)
  6. mysql lvs 读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
  7. RHEL 7.2 + Oracle 12cR2 + RAC
  8. 2017/09/15
  9. 太仓爱尚你婚庆--太仓浪漫婚庆第一品牌
  10. 到底如何保证线程安全,总结得太好了!
  11. Android Browser学习九 快捷菜单模块: PieControl的架构
  12. CF438D The Child and Sequence
  13. 第1章 信息化和信息系统
  14. html5 跨平台播放器,开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rt...
  15. Spring框架汇总(大学生的天堂 码农的圣殿)
  16. k8s可视化管理工具
  17. MySQl安装与学习,内附SQlyog
  18. 学习 Linux 有哪些好处?
  19. 罗丹明PEG罗丹明,RB-PEG-RB
  20. 华为防火墙的基本安全策略

热门文章

  1. ROS下调用笔记本和usb外接摄像头
  2. 《信号与系统》3.5.3卷积积分的 Matlab实现
  3. Java中Lambda表达式的使用
  4. Mac Ideal快捷键
  5. Vue实现在线编辑excel、导入、导出
  6. windows注册表几大键值
  7. 2013年04月13日SQL Pass在北京望京微软举办第四次线下活动,欢迎报名
  8. 判断闰年?提示:year能被4整除但是不能被100整除 或者 year能被400整除, 那么就是闰年;
  9. beego框架下获取用户get\post数据的常见方法
  10. 思科认证or华为认证,选择哪个比较好