洛谷千题详解 | P1007 独木桥【C++、Pascal语言】

news2025/2/23 6:47:52

博主主页:Yu·仙笙

专栏地址:洛谷千题详解

目录

题目背景

题目描述

输入格式

输出格式

输入输出样例

解析:

 C++源码:

Pascal源码:


 ------------------------------------------------------------------------------------------------------------------------------- 

 ------------------------------------------------------------------------------------------------------------------------------- 

题目背景

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

 ------------------------------------------------------------------------------------------------------------------------------- 

题目描述

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

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

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

 ------------------------------------------------------------------------------------------------------------------------------- 

输入格式

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

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

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

 ------------------------------------------------------------------------------------------------------------------------------- 

输出格式

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

 ------------------------------------------------------------------------------------------------------------------------------- 

输入输出样例

输入 #1复制

4
2
1 3

输出 #1复制

2 4

 ------------------------------------------------------------------------------------------------------------------------------- 

解析:

最小时间是第1号士兵向左,第2号士兵向右,结果为2.

最大时间是第1号士兵向右,第2号士兵向左,结果为4.

因此设桥长度为L,士兵方向为D,士兵位置为X,

如果求最小时间,若X<=L/2则D为左,若X>L/2则D为右,最大时间正好与之相反.

我先放出代码,暴力模拟能过就行,复杂度就不说了...

 ------------------------------------------------------------------------------------------------------------------------------- 

 C++源码:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <vector>
using namespace std;
namespace Ciyang {
    struct q_instream {
        template < typename classT >
        inline q_instream operator>>(classT &e) const {
            e= 0;
            classT f= 1, c= 0;
            while(c < '0' || c > '9') {
                if(c == '-') f= -1;
                c= getchar();
            }
            while(c >= '0' && c <= '9') e= e * 10 + c - '0', c= getchar();
            return e= e * f, (*this);
        }
    } qin;
    //读入
    struct q_outstream {
        template < typename classT >
        inline q_outstream operator<<(const classT &e) const {
            if(e < 0) {
                putchar('-');
                (*this) << -e;
            }
            else {
                if(e > 9) (*this) << (e / 10);
                putchar(e % 10 + '0');
            }
            return (*this);
        }
        inline q_outstream operator<<(const char &c) const {
            return putchar(c), (*this);
        }
    } qout;
    //输出
}  // namespace Ciyang
using namespace Ciyang;
//这之前都是快输入输出
int n, m, tmpx, tmpy, ans1, ans2;
struct player {
    int x, dir;
};
vector< player > players, rplayers;
//使用vector保存还在桥上的士兵,(名字为player是因为做游戏后遗症)
//players记录最大时间,rplayers记录最小时间
int main() {
    qin >> n >> m;
    for(int i= 1; i <= m; i++) {
        qin >> tmpx;
        if(tmpx <= n / 2)
            tmpy= -1;
        else
            tmpy= 1;
            //位置决定初始方向
        rplayers.push_back((player){tmpx, tmpy});
        players.push_back((player){tmpx, -tmpy});
    }
    //我先求最小时间再求最大时间
    while(!rplayers.empty()) {
    //桥上有士兵就一直循环
        ++ans1;
        for(int i= 0; i < (int)rplayers.size(); i++) {
            rplayers[i].x= rplayers[i].x + rplayers[i].dir;
        }
        //模拟士兵移动
        for(int i= 0; i < (int)rplayers.size(); i++) {
            if(rplayers[i].x == 0 || rplayers[i].x == n + 1) rplayers.erase(rplayers.begin() + i), i--;
        }
        //删除vector中不在桥上的士兵
        //vector删除元素后,原本i下标的士兵变成i-1
        //又因为每次循环i++所以删除后i--
    }
    while(!players.empty()) {
        ++ans2;
        for(int i= 0; i < (int)players.size(); i++) {
            players[i].x= players[i].x + players[i].dir;
        }
        //同理,模拟移动
        for(int i= 0; i < (int)players.size(); i++) {
            if(players[i].x == 0 || players[i].x == n + 1) players.erase(players.begin() + i), i--;
        }
    }
    qout << ans1 << ' ' << ans2 << '\n';
    return 0;
}

 ------------------------------------------------------------------------------------------------------------------------------- 

Pascal源码:

var
  n,m,i,j,len,maxmin,maxmax,m1:longint;
  a:array[1..100000] of longint;
//maxmin、maxmax是最小的最大和最大最大
function min(a,b:longint):longint;
begin
  if a<b then exit(a);
  exit(b);
end;
function max(a,b:longint):longint;
begin
  if a>b then exit(a);
  exit(b);
end;
begin
  readln(len);
  readln(n);
  for i:=1 to n do
    read(a[i]);
  for i:=1 to n do
  begin
    m:=min(a[i],len+1-a[i]);
    if m>maxmin then
      maxmin:=m;
  end;
  for i:=1 to n do
  begin
    m1:=max(a[i],len+1-a[i]);//都不做解释,题解说明有
    if m1>maxmax then
      maxmax:=m1;
  end;
  writeln(maxmin,' ',maxmax);
end.

------------------------------------------------------------------------------------------------------------------------------- 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NFT 推荐|辛迪加黑市系列第一弹

由 Planet Rift 呈现&#xff01; 塞巴星球的辛迪加已经洗劫了政府&#xff0c;现在是时候揭开补给品的神秘面纱了&#xff01; 辛迪加黑市系列的第一弹包括 30 个由 Planet Rift 宇宙设计的资产。其中首次发售的包含 4 套未来风格的盔甲、3 台彩色自动售货机和其他装备。 别忘…

项目管理之项目干系人

目录 前言 一、项目干系人的重要性 二、项目干系人管理过程 三、识别干系人 1.识别干系人的概念定义 2.识别干系人的输入 3.干系人分类模型 4.识别干系人的工具与技术 5.识别干系人的输出 四、规划干系人管理 1.规划干系人的输入 2.规划干系人的工具与技术 3.规划…

电脑蓝屏是哪里出了问题?不一定要非要重装系统

电脑蓝屏是非常常见的电脑故障现象&#xff0c;导致电脑蓝屏的原因很多&#xff0c;很多人第一时间反应可能是给电脑重装系统&#xff0c;但是有时并不能解决问题。那么电脑蓝屏是哪里出了问题呢&#xff1f;其实导致蓝屏不一定是系统故障&#xff0c;还有很多情况也会出现蓝屏…

Python3,爬虫有多简单,一个库,一行代码,就OK, 你确定不来试试?

爬虫进阶库&#xff1a;Scrapeasy1、 引言2、Scrapeasy2.1 简介2.1.1 Scrap2.1.2 Scrapeasy2.2 安装2.3 代码示例3、总结1、 引言 小屌丝&#xff1a;鱼哥&#xff0c; 我最近在练习写爬虫&#xff0c; 你有没有什么便捷的方式… 小鱼&#xff1a;比如呢&#xff1f; 小屌丝&a…

公众号网课查题接口

公众号网课查题接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击…

【C】自定义类型(二)位段,枚举,联合

&#x1f648;个人主页&#xff1a; 对de起日子 &#x1f449;系列专栏&#xff1a;【C语言–大佬之路】 &#x1f388;今日心语&#xff1a;谨慎的选择自己的生活&#xff0c;不要轻易让自己迷失在各种诱惑里。 前一章我们介绍了结构体&#xff0c;这一章我们来介绍一下内容&a…

大猩猩优化算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

springboot:整合其它项目

目录 一、集成Druid application.yml 二、集成redis之非注解式开发 pom.xml application.yml RedisConfig ClazzBizImpl.java 三、集成redis之注解缓存开发 RedisConfig RedisConfig 一、集成Druid 在昨天的基础上 参考网址 https://github.com/alibaba/druid/tre…

C---指针

目录指针偏移问题&#xff1a;为什么用指针&#xff1f;1.强制给指针选地址&#xff1a;2.交换两个变量的值指针与数组1.指针数组&#xff1a;数组中的每一项都是个指针2. 指针数组的用法数组指针&#xff1a;一个指向数组的指针函数指针&#xff1a;malloc内存泄露&#xff08…

洛谷千题详解 | P1005 [NOIP2007 提高组] 矩阵取数游戏【C++、 Java、Python语言】

博主主页&#xff1a;Yu仙笙 专栏地址&#xff1a;洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析&#xff1a; C源码&#xff1a; Java源码&#xff1a; Python源码&#xff1a; ----------------------------------------------------------------------…

论文阅读之RETHINKING POSITIONAL ENCODING IN LANGUAGE PRE-TRAINING

文章目录论文阅读总结参考论文阅读 文章大概提出了两个问题&#xff1a; 1.对于原来的transformer或者bert的embedding中&#xff0c;直接将word embedding&#xff08;词向量&#xff09;和positional embedding &#xff08;位置编码&#xff09;相加是不合理的&#xff0c;…

Netty入门——组件(Channel)一

目录一、channel的主要作用二、EventLoop处理io任务代码示例2.1、服务端代码示例2.2、客户端代码示例2.3、服务端和客户端查看控制台输出结果三、ChannelFuture连接问题代码示例3.1、服务端代码示例3.2、客户端代码示例3.3、服务端和客户端查看控制台输出结果3.4、ChannelFutur…

MyBatis的二级缓存

MyBatis的二级缓存 二级缓存是SqlSessionFactory级别&#xff0c;通过同一个SqlSessionFactory创建的SqlSession查询的结果会被缓存&#xff1b;此后若再次执行相同的查询语句&#xff0c;结果就会从缓存中获取。 二级缓存开启的条件&#xff1a; 1.在核心配置文件中&#x…

软件测试:写一个好的测试用例

测试场景&#xff1a; 为登录功能设计测试用例 测试员为什么要会编测试用例 测试员的目标是要保证系统在各种场景下的功能是符合设计要求的。而测试用例就是测试员想到的测试场景。&#xff08;这也是高级别的测试员即使不会代码也能找到较好工作的原因&#xff09; 编写测试…

数据库2,DQL数据查询语言,表关联关系

目录 DQL数据查询语言 简单查询语句 计算列 别名 distinct消除重复行 条件查询 条件运算符 null值判断 枚举查询 模糊查询 分支查询 函数 字符串函数 聚合函数 排序查询 分组查询Group by 分页查询Limit 表关联关系 一对一关联 一对多与多对一 多对多关联 …

[CKA备考实验][ingress-nginx] 4.2 集群外访问POD

1.创建Deployments 部署方法请参照&#xff1a; https://blog.csdn.net/qq_33868661/article/details/127505429?spm1001.2014.3001.5501 apiVersion: apps/v1 kind: Deployment metadata:labels:name: deploy1annotations:name: deploy1name: deploy1namespace: default sp…

要么干要么滚!推特开始裁员了;深度学习产品应用·随书代码;可分离各种乐器音源的工具包;Transformer教程;前沿论文 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f4c6;电子月刊 | &#x1f369;韩信子 &#x1f4e2; 解散Twitter董事会&#xff0c;代码审查&#xff0c;裁员25%&#xff0c;收每月20美元认证费马斯克那些骚操作 埃隆马斯克 (Elon Musk) 抱着洗手池入主 Twitter 后&#xff0c;狂风骤雨已…

STM32入门——uKeil5 MDK 的使用(基于固件库)

文章目录1 Keil uVision5 MDK 是什么2 建立一个标准库函数工程2.1 前期准备2.2 建立工程2.3 建立组文件夹2.4 添加文件2.4 配置“魔术棒”选项卡2.5 建立 main 函数1 Keil uVision5 MDK 是什么 Keil 软件是一种统称&#xff0c;它包含编辑器、编译器、链接器、调试器等众多工具…

冰冰学习笔记:二叉搜索树

欢迎各位大佬光临本文章&#xff01;&#xff01;&#xff01; 还请各位大佬提出宝贵的意见&#xff0c;如发现文章错误请联系冰冰&#xff0c;冰冰一定会虚心接受&#xff0c;及时改正。 本系列文章为冰冰学习编程的学习笔记&#xff0c;如果对您也有帮助&#xff0c;还请各位…

堆外内存和堆内内存及虚引用的应用

目录 内存区域划分&#xff1a; 元空间 程序计数器 直接内存 对象的创建 对象的访问定位 判断对象是否存活 堆外内存 堆内内存的缺点以及引入堆外内存 为什么需要堆外内存&#xff1f; 如何分配堆外内存&#xff1f; 如何回收堆外内存&#xff1f; 1) System.gc()…