小明上学
#include <iostream>
using namespace std;
int main(){
int r,y,g,time=0;
cin>>r>>y>>g;
int n;
cin>>n;
int a[n][2];
for(int i=0;i<n;++i){
for(int j=0;j<2;++j)
cin>>a[i][j];
}
for(int i=0;i<n;++i){
if(a[i][0]==0||a[i][0]==1)
time+=a[i][1];
if(a[i][0]==2)
time+=(a[i][1]+r);
}
cout<<time;
return 0;
}
注意:与现实生活不同,本题红绿灯变换顺序为红、绿、黄
Q&A 是否需要将通过路口的时间与绿灯时间比较,若大于绿灯时间,则等待r+y红黄灯时间间隔,再通过路口??
答:不需要。题干中记录的是小明经过每段路的时间,和各个红绿灯在到达路口时的颜色和倒计时秒数,所以可以直接进行简单算术加法。建议和小明放学这个问题对照着看。
小明放学
红绿灯变换顺序同样为红、绿、黄,由于颜色和倒计时秒数不是实时的而是某时刻预知的,因此需要实时考虑行路时间对灯颜色变化的影响。
存