题解 P7190 【[COCI2007-2008#6] SEMAFORI】

· · 题解

题意

传送门

Luka 在开卡车,路上有很多信号灯。

对于每个信号灯,他都知道红灯和绿灯亮的时间(循环不断重复)。

Luka 开始开车时,所有交通信号灯都呈红色,并且开始循环。

Luka 每秒移动 1 个距离单位。当交通信号灯为红色时,他要停车,直到它变成绿色。

编写一个程序,确定 Luka 需要多少时间才能到达路的尽头。

道路的起点在 0 处,终点在 l 处。

思路

模拟题!!!

1.输入

2.模拟每一秒

2.(1)时间加1

2.(2)判断是否碰到红绿灯

2.(3)碰到红绿灯碰到灯色

3.输出

Code

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,l,Luka=0,t=0,k=0;
    cin>>n>>l;
    int d[n],r[n],g[n];
    for(int i=0;i<n;i++){
        cin>>d[i]>>r[i]>>g[i];
    }
    while(Luka!=l) {
        t++;
        if(Luka!=d[k]){
            Luka++;
        }
        else {
            int m=t%(r[k]+g[k]);
            if(m==0||m>r[k]){
                Luka++;
                k++;
            }
        }
    }
    cout<<t;
    return 0;
}