题目描述
Luka 在开卡车,路上有很多信号灯。
对于每个信号灯,他都知道红灯和绿灯亮的时间(循环不断重复)。
Luka 开始开车时,所有交通信号灯都呈红色,并且开始循环。
Luka 每秒移动 1 个距离单位。当交通信号灯为红色时,他要停车,直到它变成绿色。
编写一个程序,确定 Luka 需要多少时间才能到达路的尽头。
道路的起点在 00处,终点在 l 处。
输入格式
第一行两个数 n,l含义见题目描述。
接下来,n 行中的每行三个整数 d, r, g。 d 表示信号灯到道路起点的距离, r和 g 分别表示红色和绿色信号灯亮的时间。
信号灯将按 d升序排列。
没有两个交通信号灯将在同一位置。
输出格式
第一行,一个正整数,表示 Luka 到达路的尽头的时间。
输入输出样例
输入 #1
2 10 3 5 5 5 2 2
输出:
12
输入:
4 30 7 13 5 14 4 4 15 3 10 25 1 1
观察红绿灯周期
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,l,time=0,where=0;
cin>>n>>l;//定义红路灯个数,l距离
int d,r,g;//d为到红绿灯的距离
for(int i=0;i<n;i++){
cin>>d>>r>>g;
time+=d-where;//到达路口时间累加
where=d;
int now=time%(r+g);//计算周期
if(now>=r){//如果周期余数大于红灯时间可直接通过
continue;
}else{//余数小于红灯时间要进行等待
time+=r-now;//累加时间:未过去等待时间
}
}
time+=l-where;//剩余的距离-现在的则为剩下的距离,又因为速度为1,所以为剩下的时间
cout<<time;
return 0;
}
不懂得可以在评论区进行留言哦