CCF 2018年12月第二题 小明放学

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_41563270/article/details/108349393