CCF-CSP 201812-2小明放学

import java.util.Scanner;
import java.util.Stack;
public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		long r,g,y,roadNum;
		r = s.nextLong();
		y = s.nextLong();
		g = s.nextLong();
		roadNum = s.nextLong();
		//ans是已经花费的秒数
		long ans=0;
		long light,time;
		for(long i=0;i<roadNum;i++) {
			light = s.nextLong();
			time = s.nextLong();
			//根据ans(即已经花费的秒数)来计算现在的light和time 还要注意如果是刚上路则不用计算
			long yu = ans % (r+g+y);
			if(light!=0 && i!=0) {
				//灯的变化
				boolean flag=true;
				while(flag) {
					if(yu<time) { //说明不需要变色 直接改变time就行
						time = time-yu;
						flag=false;
						continue;
					}
					if(light==1) { //如果是红灯 下一次将变为绿灯
						light = 3;
						//绿灯的剩余时间
						if(g+time-yu>0) {
							time = g+time-yu;
							flag=false;
						}
						else time = g+time;
					}else if(light==2) { //如果是黄灯 下一次将变为红灯
						light=1;
						//红灯的剩余时间
						if(r+time-yu>0) {
							time = r+time-yu;
							flag=false;
						}
						else time = r+time;
					}else if(light==3) { //如果是绿灯 下一次将变为黄灯
						light=2;
						//黄灯的剩余时间
						if(y+time-yu>0) {
							time = y+time-yu;
							flag=false;
						}
						else time = y+time;
					}
				}
			}
			//开始相加
			if(light==0 || light==1) {  //1红2黄3绿 亮灯红绿黄
				ans+=time;
				continue;
			}else if(light==2) {
				ans+=time;
				ans+=r;
				continue;
			}else if(light==3) continue;
		}
		System.out.print(ans);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值