ccfcsp-20181202-小明放学-JAVA语言

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main02 {

//	此题需要注意的是:
//	1.题目给出的都是出发时刻的红绿灯情况,所以需要根据r,y,g的值计算出到达路口时的红绿灯情况
//	2.csp的题目特别喜欢在大数上做文章,所以看到规模超过10^3果断用long
	
	public static long[] judge(long i,long r,long g,long y) {
//		i是距离0时刻的时间
		long cir=r+g+y;
		i=i%cir;
		long[] resType=new long[2]; 
		if(i>=0 && i<r) {resType[0]=1; resType[1]=r-i;}
		else if(i>=r && i<r+g) {resType[0]=3; resType[1]=r+g-i;}
		else {resType[0]=2; resType[1]=cir-i;}
		return resType;
	}
	public static long[] curLight(long k,long t,long r,long g,long y,long past) {
		if(k==1) {
			past+=r-t;
		}
		else if(k==3) {
			past+=r+g-t;
		}
		else if(k==2) {
			past+=r+g+y-t;
		}
		return judge(past,r,g,y);
	}
	public static void main(String[] args) {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String[] r1;
		try {
			r1 = br.readLine().split(" ");
			long r=Integer.parseInt(r1[0]);//红灯设置
			long y=Integer.parseInt(r1[1]);//黄灯设置
			long g=Integer.parseInt(r1[2]);//绿灯设置
			long n=Integer.parseInt(br.readLine());
			long sum=0;
			for(long i=0;i<n;i++) {
				String[] temp=br.readLine().split(" ");
				int k=Integer.parseInt(temp[0]);//出发时什么刻灯
//				k=1红灯 k=2黄灯 k=3绿灯
				long t=Integer.parseInt(temp[1]);//出发时刻灯还剩多少秒到下一个灯
				if(k==0) sum+=t;
				else {
					long curK=curLight(k,t,r,g,y,sum)[0];
					long curT=curLight(k,t,r,g,y,sum)[1];
					if(curK==1) sum+=curT;
					else if(curK==2) sum+=curT+r;					
				}
			}
			System.out.println(sum);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值