算法1
思路:其实这个题写起来不难,我觉得读懂题题是最难的
首先:他的三个灯是红绿黄的顺序亮,红灯的区间是[0,r],绿灯的区间是[r,r+g],黄灯的区间是[r+g,r+g+g],
如果k=1,说明这段路现在遇见的是红灯,我需要等待t秒,所以我的总时间res直接res+=t,绿灯不需要等待,所以res不需要加,黄灯的情况,说明已经经历过红灯绿灯了,而且绿灯不需要等待,所以黄的等待时间为等待红灯的时间,加等待黄灯的时间,即res+=r+t
最后输出res即可
C++ 代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int r,y,g;//三个灯
int n,res=0;//路口数量
cin>>r>>y>>g>>n;
while(n--)
{
int k,t;
cin>>k>>t;
//核心三行
if(!k)res+=t;//如果k==0,那么直接把这段路的时间记录下来
else if(k==1)res+=t;//k=1,表示是红灯,需要把时间加下来
else if(k==2)res+=t+r;//这里需要注意了,如果是黄灯,说明之前等了红灯的时间r,和等黄灯需要的时间t
}
cout<<res<<endl;
return 0;
}