洛谷——P2077 红绿灯(解法2)

P2077 红绿灯(解法2)

题目描述

在一个城市,有一条笔直的公路,在这条公路上有 NN 个十字路口,每个路口都设有一个红绿灯,已知相邻的两个路口距离为 A_iA**i 千米 (1\le i < N)(1≤i<N),每个路口的红灯时间为 R_iR**i,绿灯时间为 G_iG**i,没有黄灯,现在有一辆车从距离 11 号十字路口 MM 千米的位置出发,且此时所有路口的红绿灯刚好从红灯跳到绿灯,问这辆车通过每个路口的时间(不能闯红灯,这辆车的速度为 11 千米每分钟)。

输入格式

第一行两个正整数 NN 和 MM

第二行 N-1N−1 个正整数 A_iA**i

第三行 NN 个正整数 R_iR**i,为红灯时间(分钟)

第四行 NN 个正整数 G_iG**i,为绿灯时间(分钟)

输出格式

共 NN 行,每行一个正整数,为这辆车通过每个十字路口的最早时间。

输入输出样例

输入 #1复制

5 3
2 4 3 2
3 4 3 4 3
2 3 2 3 1

输出 #1复制

5
7
11
14
16

说明/提示

对于 50%50% 的数据 N\le 1000N≤1000;

对于 100%100% 的数据 N\le 10^5N≤105,M,A_i\le 10M,A**i≤10,R_i,G_i\le 5R**iG**i≤5。

#include<bits/stdc++.h>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int main(){
		
	int total_time=0,waiting_time;	
	int n,m;
	cin>>n>>m;
	int a[n-1],r[n],g[n];
	  //输入N—1个相邻路口距离
	 a[0] = m;
	for(int i=1;i<n;i++){
		cin>>a[i];
	}
	for(int i=0;i<n;i++){
		cin>>r[i];
	}
	for(int i=0;i<n;i++){
		cin>>g[i];
	}
	
	for(int i=0;i<n;i++){
		total_time+=a[i]/1; //直接加上间隔距离所花时间 

		//判断是否红灯	
		if(total_time%(r[i]+g[i])>g[i]){
		  //是红灯 
		  waiting_time=r[i]+g[i]-(total_time%(r[i]+g[i])); //计算等待红灯的时间 
		   total_time += waiting_time;//加上等红灯的时间 
		   
		}
		cout<<total_time<<endl;
	}
	return 0;
	
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不易撞的网名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值