快速brt问题(c++)

焯,就这玩意浪费我两小时青春一定要把它记下来

题目:在城市里,快速公交(BRT)线路为一条直线,在其线路上有 n 个交叉路口,在每个路口都有一个交通信号灯,在红灯与绿灯之间周期性循环。

   在绿灯亮起持续 g 秒的期间,允许通行,之后变为红灯,保持 r 秒,红灯期间禁止车辆通行。如果一辆车正好在变为红灯的时候到达交叉口,它应该停车,但是如果是正好变成绿灯,车辆就可以继续行驶。

 

   所有的交通灯都有相同的变化时间,并且是同步的。换句话说,对于所有的交通灯来说,红灯(和绿灯)的相位是相同的,它们都在第 0 时刻开始变为绿色。

   BRT公司已经设计好了公交车通过每个路段的时间,路段是指两个连续的交通灯之间的距离,或者是起点与第一个交通灯的距离,或者是最后一个交通灯与终点的距离,更精确地讲,BRT专家设计了 n + 1 个正整数 li,时间以秒计,表示公交车从起点到终点时穿过第 i 路段的时间,l1 为从起点到第一个路口的时间, ln+1 表示从最后一个路口·到终点的时间。

   在一天内有 q 辆公交车离开起点,第 i 辆车在时刻 ti以秒计)出发,公司管理者想知道公交车在什么时间可以到达终点。

   输入的第一行为三个整数 n、g、r,分别表示交叉路口的个数,绿灯持续的时间和红灯持续的时间。

   接下来一行为 n + 1 整数 li , i =1, ..., n + 1,表示公交车通过第 i 个路段的时间。

   接下来的一行为单一的一个整数 q,表示一天内从起点出发的公交车数量,接下来的一行为 q 个整数,表示每辆公交车离开起点的时间

开始解析

说实话这🐂🐎题对我这种纯度的菜鸡来说挺难

当大家都在做字符串的时候我还在补过去几周划水留下的作业

一开始看都没看懂,我不理解,为什么这一道b题能有那么多未知量(题目乍一看有很多未知量,看我上面拿绿色注释的内容就觉得这题好多未知量,如n:交叉路口个数;g:绿灯持续时长;r:红灯持续时长;再有什么li啊i啊什么的)在我没有细品这道题之前仍是一头雾水。中午去理发的路上满脑子都是brt(理发的时候满脑子都是等会怎么拒绝tony老师让我烫发)一路上思考无果于是我就放弃了(不是)

                                            

 

于是乎晚自习继续做这玩意,n g r q四个字母在脑中不断闪过,我也大概能明白它是要我输入数字“n”表示路上的红绿灯数,有n个红绿灯,那就有n+1个路段

 

如图嘛,如果n为3,那么就会有4段路段,

我先忽略掉q辆车要走时q>1,的情况,我先把一辆车走好。

题目有讲过,每一辆车都有一个对应的出发时间,记住我们最终在控制台上输出的是车抵达终点时所用的时间  那么当q等于1时,在brt开到第一个红绿灯时,它已经用了的时间是

从计时开始到brt出发的时间+brt到达第一个红绿灯经过路段时的时间

到了红绿灯前面就要该判断下现在是红灯还是绿灯,红绿灯可不兴闯,不然谭sir会追上来的。

那么该怎么判断现在是红灯还是绿灯呢,比如我设g为3,r为2,那么在一定时间内灯的情况是:

G g g r r g g g r r g g g r r g g  g r r g g gr r g g g r r g g g r r g g g r r

在经过草稿本上数学推算后,得到(不妨设计时器cnt(从工作开始计时起记录时间))

cnt%(g+r)>=0且cnt%(g+r)<g时,车面前的灯是绿灯,那么它可以继续冲

 

那么cnt可以在原来时间的基础上再加上走第二段路程的时间

如果brt到红绿灯前时计时器记录的时间不满足条件cnt%(g+r)>=0且cnt%(g+r)<g

那它就是遇到红灯了嘛,那它要等完这个红灯再出发,这个需要等待的红灯的时长为

:r-(cnt%(g+r)-g)

在计时器加上这个时间后,再出发走掉下一个路段,cnt再加上这个走过的“下一个路段“的时长

以上,我们便解决了的一辆brt从起点运行到终点所用的时间,

那么多辆brt呢?用一个for循环+数组z[q]就好了,用它解决记录多辆车的出发时间问题

 

()

 

于是乎,这道题就做完了。Cg上也满分通过

我流露出快乐的笑容

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
DSP(数字信号处理器)是一种专用微处理器,用于处理数字信号。1553BRT(双脚跳跃调制编码)是一种用于数据传输和通信的标准。 要在DSP中读取1553BRT地址,首先需要了解DSP和1553BRT之间的接口。通常,在DSPLink的支持下,DSP可以与主机系统进行通信。这种连接通常使用一种称为DSPLink的软件库或框架,该库提供了一个接口,通过该接口可以在DSP和主机之间进行数据传输。 为了读取或访问1553BRT地址,需要执行以下步骤: 1. 首先,将DSP与主机系统通过DSPLink进行连接。这涉及设置一个通信通道或链接,以便DSP和主机可以互相通信。 2. 在主机系统中创建一个用于访问1553BRT地址的软件模块。这个模块应该包含用于与DSP通信的代码。 3. DSP端需要编写相应的代码,以便在DSP上实现1553BRT地址的读取。这涉及使用DSPLink中提供的API来建立与主机系统的通信,并接收主机系统发送的读取请求。 4. 在主机系统上,通过调用相应的函数或方法,将读取请求发送到DSP上。该请求应包含1553BRT地址的信息。 5. DSP接收到读取请求后,执行相应的操作来读取1553BRT地址。这可能涉及到DSP的特定寄存器或内存区域的读取操作。 6. 一旦DSP读取了1553BRT地址,它可以将结果发送回主机系统,以便主机系统可以进一步处理或显示。 需要注意的是,具体的实现步骤可能因DSP和DSPLink库的不同而有所不同。此外,还需要考虑DSP和主机系统之间的通信协议和数据格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值