洛谷 -P1007 独木桥(模拟,思维)

独木桥

题目背景

战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒,因为这座独木桥十分狭窄,只能容纳 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 1L5×103 0 ≤ N ≤ 5 × 1 0 3 0\le N\le5\times10^3 0N5×103,且数据保证 N ≤ L N\le L NL


在做这道题的时候思路走偏了,导致想用找规律的方法来解决这道题,最后当然是不对的。

首先对于两个迎面而走的士兵,会有如图所示的走法:

在这里插入图片描述
所以就相当于a2和a1擦肩而过,然后a2走a2的,a1走a1的一样。

也就是说我们不必考虑每两个士兵会在什么时候什么地点相遇。

在求解第一问最小时间的时候,我们只需要让所有士兵去找左右两端更近的那一边走就可以了,因为就算相撞也是擦肩而过。
那么最终得到的最长时间就是花费时间最长的那个士兵走到头所需要的时间,所以可以直接枚举所有士兵,先对他们向左和向右的时间花费取最小值,然后再从全局取所有最小值的最大值。

在求解第二问的时候,可以对所有士兵的坐标进行排序,最靠左的就让他向右走,最靠右的就让他向左走,然后在他们两个中间取最大值,这样就能够求解出时间最大值。

CODE:

#include<bits/stdc++.h>
using namespace std;
const int N = 5e3+10;

int a[N];

int main(){
    int l,n;
    cin >> l >> n;
    for(int i = 1;i <= n;i++){
        cin >> a[i];
    }

    if(n == 0){		//特判
        cout << 0 << " " << 0 << endl;
        return 0;
    }
    if(n == 1){
        cout << min(a[1],l-a[1]+1) << " " << max(a[1],l - a[1] + 1);
        return 0;
    }
    
    int res = -1e9;
    for(int i = 1;i <= n;i++){
        res = max(res,min(a[i],l - a[i] + 1));
    }
    cout << res << " ";
    
    sort(a+1,a+1+n);
    res = max(a[n],l - a[1] + 1);
    cout << res << endl;
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/564710.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VMware 15 虚拟机网络遇到的问题

剧情提要 通过Cent os7 的镜像文件&#xff0c;创建了一个虚拟机A&#xff08;后面简称A&#xff09;&#xff0c;事后发现&#xff0c;宿主机无法ping通A 在虚拟机中通过IP a 看到的IP信息也没有只管的ip信息如图 然后执行&#xff0c;宿主机才能访问A。 sudo dhclient ens…

前端css中的transform(转换)的使用

前端css中的transform的使用 一、前言二、流程图三、举例&#xff08;一&#xff09;、平移1.平移&#xff0c;源码12.源码1运行效果(1).视频效果(2).截图效果 3.平移3d效果&#xff0c;源码24.源码2运行效果&#xff08;1&#xff09;、视频效果&#xff08;2&#xff09;、截…

如何使用RRT模式进行交易,Anzo Capital一篇文章说清楚

railway tracks烛台模式(或铁路线 - RRT)是一种基于价格行为的简单交易策略&#xff0c;这种策略交易原理相当简单&#xff0c;易于使用。 RRT烛台形态也是图表上经常出现的形态&#xff0c;如果知道如何使用它&#xff0c;Anzo Capital认为它就是具有强烈交易信号的形态。 …

要提升B端管理系统颜值,登录页就是第一道门面,必须升级

登录页是B端管理系统门面&#xff0c;对于系统的品牌形象、辨识度、品质展示等有着不可替代的作用&#xff0c;是B端管理系统升级的必备页面&#xff0c;这里面有什么原因呢&#xff1f;10年经验的老司机→贝格前端工场为您分析一下。 一、登录页对于系统形象的重要性 B端管理…

SLS 查询新范式:使用 SPL 对日志进行交互式探索

作者&#xff1a;无哲 引言 在构建现代数据和业务系统的过程中&#xff0c;可观测性已经变得至关重要&#xff0c;日志服务&#xff08;SLS&#xff09;为 Log/Trace/Metric 数据提供了大规模、低成本、高性能的一站式平台服务&#xff0c;并提供数据采集、加工、投递、分析、…

合约X—314协议系统开发

随着区块链技术的不断发展&#xff0c;越来越多的协议被提出和应用&#xff0c;其中X314协议就是其中之一。该协议旨在通过去中心化、安全性和可扩展性等方面&#xff0c;为区块链应用提供更好的支持。本文将从多个角度对X314协议进行深度解析&#xff0c;探讨其优势和不足&…

牛客NC162 二叉树中和为某一值的路径(三)【中等 dfs C++、Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/965fef32cae14a17a8e86c76ffe3131f 思路 既然要找所有路径上节点和等于目标值的路径个数&#xff0c;那我们肯定先找这样的路径起点啊&#xff0c; 但是我们不知道起点究竟在哪里&#xff0c; 而且任意节点都有…

【机器学习】《机器学习建模基础》笔记

文章目录 单元0 前言单元1 数学建模与机器学习学习目标&#xff08;一&#xff09;什么是模型&#xff08;二&#xff09;数学模型的分类&#xff08;三&#xff09;数学建模的一般步骤&#xff08;四&#xff09;机器学习的概念&#xff08;五&#xff09;机器学习的分类&…

CTF-reverse-simpleRE(base64变表逆向)

题目链接 NSSCTF | 在线CTF平台 题目详情 [HUBUCTF 2022 新生赛]simple_RE 解题报告 下载得到的文件使用ida64分析&#xff0c;如果报错就换ida32&#xff0c;得到分析结果&#xff0c;有main函数就先看main main函数分析 main函数的逻辑看下来十分简单&#xff0c;因此关键…

机器学习(三)之监督学习2

前言&#xff1a; 本专栏一直在更新机器学习的内容&#xff0c;欢迎点赞收藏哦&#xff01; 笔者水平有限&#xff0c;文中掺杂着自己的理解和感悟&#xff0c;如果有错误之处还请指出&#xff0c;可以在评论区一起探讨&#xff01; 1.支持向量机&#xff08;Support Vector Ma…

混淆原理与实践指南

引言 &#x1f680; 在当今的软件开发领域&#xff0c;保护代码的安全性和保密性变得越来越重要。混淆&#xff08;Obfuscation&#xff09;技术作为一种保护代码的手段&#xff0c;在应对逆向工程和代码盗用方面发挥着关键作用。本文将深入探讨混淆的原理&#xff0c;以及如何…

【Flutter】One or more plugins require a higher Android SDK version.

问题描述 项目里多个组件需要更高版本的Android SDK One or more plugins require a higher Android SDK version.解决方案&#xff1a; 报错提示requires Android SDK version 34 按提示修改android项目app里build.gradle的compileSdkVersion 为34 android {compileSdkVe…

16.哀家要长脑子了!

目录 1. 707. 设计链表 - 力扣&#xff08;LeetCode&#xff09; 2.203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 3.206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 4.237. 删除链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 5. 19. 删除链…

实测数据的功率谱估计

目录 1.脉搏数据1.1 数据1的结果1.2 数据2的结果 2.振动加速度数据 1.脉搏数据 1.1 数据1的结果 1.2 数据2的结果 2.振动加速度数据

宏基因组|使用CheckM2评估分箱质量

简介 CheckM2使用机器学习快速评估基因组bin质量 与CheckM1不同&#xff0c;CheckM2采用通用训练的机器学习模型&#xff0c;无论分类学谱系如何&#xff0c;均可用于预测基因组bin的完整性和污染情况。这使得它能够在训练集中纳入许多仅具有少数&#xff08;甚至只有一个&am…

WSL安装-问题解决

WslRegisterDistribution failed with error: 0x8004032d WslRegisterDistribution failed with error: 0x80080005 Error: 0x80080005 ??????? 解决&#xff1a; 1、 winr输入&#xff1a;optionalfeatures.exe 2、打开这两项

Navicat 干货 | 掌握 PostgreSQL 规则语法

PostgreSQL 规则提供了一种强大的机制&#xff0c;控制查询执行并在数据库内部实施数据操作。理解规则的语法和用法对于有效利用其功能至关重要。在上周的文章中&#xff0c;我们探讨了 PostgreSQL 规则的工作原理及其与触发器的区别。今天的文章将使用免费的 “dvdrental”示例…

​Game Maker 0.10:让创作、协作和游戏变得更简单

继去年 12 月成功发布 Game Maker 0.9 之后&#xff0c;我们又隆重推出 Game Maker 0.10。在 0.9 更新的主要增强功能基础上&#xff0c;该版本为创作者实现其愿景提供了更多改进和工具。 为此&#xff0c;The Sandbox 还正式启动了全球范围的创作者训练营&#xff0c;以帮助我…

初学python记录:力扣377. 组合总和 Ⅳ

题目&#xff1a; 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 提示&#xff1a; 1 < nums.length < 2001 < nums[i] < 1000nu…

双周总结#008 - AIGC

本周参与了公司同事对 AIGC 的分享会&#xff0c;分享了 AIGC 在实际项目中的实践经验&#xff0c;以及如何进行 AIGC 的落地。内容分几项内容&#xff1a; 什么是 AIGCAIGC 能做什么AIGC 工具 以年终总结为例&#xff0c;分享了哪些过程应用了 AIGC&#xff0c;以及 AIGC 落地…