算法十

xiaoxiao2021-02-28  87

交通

算法描述

市民们抱怨红绿灯设置得不合理,导致路上的时间太长交通局应市民要求,给出了红绿灯的控制算法在此场景中,请你计算出已知红绿灯控制算法的情况下,一辆车通过一段路程所需的总时间信号灯算法:一共只有红灯或绿灯两个状态,初始状态都是绿灯,给出信号持续时间的数组lights,数组中信号灯按照汽车经过的顺序排列每个信号灯之间相隔150米,汽车在第一个信号灯之前150米起步,在最后一个信号灯之后的150米停下来,假设汽车没有加速、减速,速度要么是0,要么就是以speed米/秒匀速行驶返回汽车到达终点时所需的时间,最后的时间需将小数部分去掉(55.5取55,44.9取44)

参数定义

类名 Traffic方法 time输入参数 vector <int>, int输出 int方法声明 int time(vector <int> lights, int speed)

限制条件

speed 可以为如下大小:5, 10, 15, 20, 25, or 30.lights 包含[1, 50]个元素lights 中的每个元素都是整数,大小在[10, 60]之间

例子

输入 lights: {10,10,10}speed: 30输出 30

在time = 5时,汽车到达第一个信号灯, 信号灯依然是绿灯,汽车直接通过 在time = 10时,汽车到达第二个信号灯, 刚好变红1. 等待10秒,变绿 在time = 20时, 信号灯变绿,汽车立即以30米/秒的速度行驶而过 在time = 25时,汽车到达第三个信号灯,绿灯,直行 在time = 30时,汽车到达终点(第三个信号灯的后150米)

测试实例

实例一

输入

{10,10,10}20

输出

35

实例二

输入 {10,20,30}20输出 30

实例三

输入 {10,11,12,13,14,15}5输出 240

实例四

输入 {60,60,60,60,60,60,60,60,60,60}5输出 630

实例四

输入 {55,29,26,12,19,39,18,20,23,28,56,20,59,48,33,40,30,60,19}25输出 252

代码

#include <iostream> #include <vector> #include <cmath> using namespace std; class Traffic { public: int time(vector<int> lights, int speed) { float totalTime = 0.0; // loop for each route, calcute the time for(vector<int>::const_iterator iter = lights.cbegin(); iter < lights.cend(); iter++) { // add the iter'th route time to the total time totalTime += 150.0 / speed; // judge if stop is needed, if needed, add the wait time int needStop = totalTime / (*iter); if(0 != needStop % 2) totalTime += *iter - fmod(totalTime, (*iter)); } totalTime += 150.0 / speed; return floor(totalTime); } }; int main() { vector<int> lights {55,29,26,12,19,39,18,20,23,28,56,20,59,48,33,40,30,60,19}; int speed = 25; Traffic tc; int ret = tc.time(lights, speed); cout << ret << endl; cout.flush(); }
转载请注明原文地址: https://www.6miu.com/read-58908.html

最新回复(0)