CCF-CSP 201812-2 小明放学 满分题解
题目链接:CCF-CSP 201812-2 小明放学
思路:
1.此题需要判断当小明到达红绿灯时,此时红绿灯的颜色情况,以及剩余的时间。
2.判断红绿灯的情况需要根据循环来判断,即采用总时间%(红+绿+黄),得到的余数用来判断。
3.绿灯情况可以直接走,不用计时,则在判断红绿灯颜色时,为简化代码,可不用写绿灯的情况,另外k=0的情况可以直接计时。
4.为避免内存不够,数据类型都采用long long类型。
细节注意:
1.刚开始知道的时间为出发时刻的时间
2.红绿灯的变化顺序为:红->绿->黄
3.黄灯等待完后需要等待红灯
代码如下:
#includeusing namespace std; long long r,y,g,n; int main() { cin>>r>>y>>g>>n; long long sum=0; long long sum1=0; long long k,t; while(n--) { cin>>k>>t; sum1 = sum; sum1 = sum1%(r+y+g); if(k==0)//此时可以直接通行 { sum+=t; } else if(k==1)//此时为红灯 { if(sum1-t<0)//若此时还是红灯,则需要等待的时间为t-sum1 { sum+=t-sum1; } else if(sum1-t>=g&&sum1-t =g+y&&sum1-t =0&&sum1-t = t+r+g && sum1-t< r+g+y)//若此时为黄灯,则需要等待的时间为r+g+y-(sum1-t)+r; { sum+=r+g+y-(sum1-t)+r; } } else if(k==3)//此时为绿灯 { if(sum1-t>=0&&sum1-t =y&&sum1-t



