#include <iostream>
using namespace std;
int main()
{
int light[3];
// 输入顺序 red yellow green
// 红绿灯顺序 0 yellow 1 red 2 green
cin>>light[1]>>light[0]>>light[2];
int n;
cin>>n;
int i,k,t;
// sum为一个循环红绿灯的时长
// ans为自出发到当前的总时长
// last为最后一个循环的时长
int sum,last;
long long ans;
sum=light[0]+light[1]+light[2];
for(i=0,ans=0;i<n;i++){
cin>>k>>t;
if(k==0){
// 道路
ans+=t;
}
else{
// 路口
// 先进行k的转化,与数组对应,原k,1,2,3,分别代表红,黄,绿
if(k==2){
k=0;
}
else if(k==3){
k=2;
}
//当k与数组对应后,进行相应运算,先将最后一个循环的时长算出
last=(ans+light[k]-t)%sum;
while(last>light[k]){
last-=light[k];
k=(k+1)%3;
}
if(k==1){
ans=ans+light[k]-last;
}
if(k==0){
ans=ans+light[k]-last+light[k+1];
}
}
}
cout<<ans;
return 0;
}
CCF 2018年12月第二题 小明放学
猜你喜欢
转载自blog.csdn.net/qq_41563270/article/details/108349393
今日推荐
周排行