csp201812_2 小明放学 java

博客分析了CSP201812_2问题,涉及小明放学途中遇到的红绿灯状态。文章计算了一圈红绿灯的周期,并根据总时间模周期的余数判断到达路口时红绿灯的状态及应等待的时间。

csp201812_2 小明放学 java

csp201812_2 小明放学 java

红黄绿灯的状态是开始的时候记录的
一圈红绿灯所用时间 周期 = 红灯r+黄灯y+绿灯g
统计总时间 sum
那么每到达路口 最后一圈(红黄绿中的两种状态 或 一种状态)的时间 zhuihou= sum% 总时间 ;
如果最后的时间zhuihou减去 红绿灯剩余时间 t >0 则说明 红绿灯在当前状态 跳转到 下一种状态 那么得减去 响应的下一种状态灯的时间
直到最后的值小于0 才表示 到达该路口 的 路灯颜色 以及应该等的时间

public class csp201812_2_2 {
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String tmp[] = bf.readLine().split(" ");
		int r = Integer.parseInt(tmp[0]);
		int y = Integer.parseInt(tmp[1]);
		int g = Integer.parseInt(tmp[2]);
		int n = Integer.parseInt(bf.readLine());
		int shijian[] = new int[4];
		shijian[1] = r;
		shijian[2] = y;
		shijian[3] = g;
		int zhouqi = r+y+g;    //  红黄绿 灯 跑一遍的周期
		long sum = 0;
		long zhuihou = 0;         
		int k = 0;
		int t = 0;
		for(int i=0;i<n;i++) {
			tmp = bf.readLine().split(" ");
			k = Integer.parseInt(tmp[0]);
			t = Integer.parseInt(tmp[1]);
			if(k==0) {
				sum += t;
				continue;
			}
			zhuihou = (sum%zhouqi) -t ;    
										   //  总时间取余 就能 得到 小于 最后一圈所用时间的  红黄绿 中其中 两种或一种 状态 
										   // 如果 最后的时间减去 红绿灯剩余时间  >0  则说明 红绿灯在当前状态 跳转到 下一种状态 
										   //直到最后的值小于0 才表示 到达该路口 的 路灯颜色 以及该等的时间
			
			while(zhuihou>=0) {           
				if(k==1) {
					k = 3;
				}else {
					k = k - 1 ;
				}
				zhuihou -= shijian[k];
			}
			  // 如果是3 绿灯就可不记录 
			if(k==1) {
				sum -= zhuihou;    //减是因为 zhuihou是负数
			}
			if(k==2) {
				sum -= zhuihou;    //减是因为 zhuihou是负数
				sum += r;
			}
		}
		System.out.println(sum);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值