题解
相信大家已经看过题了,直接上思路!!
信号灯的顺序是绿->黄->红,和输入的顺序是相反的。
就按照题目给的例子来说,输入为3 10时,之前用时为41s,那么41-10=31,也就是该绿灯走完后,还有31s。那么这31s内,该绿灯变成了什么颜色? 31-3=28,走完黄灯。28-30= -2,可见没有走完红灯,那么此时就要等待2s。
对于其余样例,大家可以试试,说白了也就是一个简单的模拟!
注意点
1.根据该题的 评测用例规模与约定 ,数据应该为long long型。 2.代码中: temp=sum%total-arr[i][1]; ,如果不对sum取余,会超时。total为绿黄红的一个周期,对于完整的周期就不用考虑了,这样可以节省时间!只需要考虑取余后最后落到了那个时间里。
C++代码
#include <iostream>
#include <math.h>
using namespace std
;
int main(int argc
, char** argv
) {
long long light
[3];
for(int i
=0;i
<3;i
++){
cin
>>light
[i
];
}
long long total
=light
[0]+light
[1]+light
[2];
long long n
;
cin
>>n
;
long long arr
[n
][2];
for(int i
=0;i
<n
;i
++){
for(int j
=0;j
<2;j
++){
cin
>>arr
[i
][j
];
}
}
long long sum
=0,temp
;
int index
;
for(int i
=0;i
<n
;i
++){
if(arr
[i
][0]==0){
sum
+=arr
[i
][1];
continue;
}
temp
=sum
%total
-arr
[i
][1];
index
=arr
[i
][0]-1;
while(temp
>0){
index
--;
if(index
==-1)index
=2;
temp
=temp
-light
[index
];
}
if(index
==0){
sum
+=abs(temp
);
}else if(index
==1){
sum
+=abs(temp
)+light
[0];
}
}
cout
<<sum
;
return 0;
}