P2077 红绿灯
提交10.15k
通过4.43k
时间限制1.00s
内存限制125.00MB
提交答案加入题单复制题目
做题计划(首页)
个人题单
团队题单
保存
选择团队
保存
题目提供者ahwhGQY
难度入门
历史分数100
标签
查看算法标签
相关讨论
查看讨论
推荐题目
查看推荐
正在上传…重新上传取消 洛谷推荐关闭
复制Markdown 展开
题目描述
在一个城市,有一条笔直的公路,在这条公路上有 NN 个十字路口,每个路口都设有一个红绿灯,已知相邻的两个路口距离为 A_iAi 千米 (1\le i < N)(1≤i<N),每个路口的红灯时间为 R_iRi,绿灯时间为 G_iGi,没有黄灯,现在有一辆车从距离 11 号十字路口 MM 千米的位置出发,且此时所有路口的红绿灯刚好从红灯跳到绿灯,问这辆车通过每个路口的时间(不能闯红灯,这辆车的速度为 11 千米每分钟)。
输入格式
第一行两个正整数 NN 和 MM
第二行 N-1N−1 个正整数 A_iAi
第三行 NN 个正整数 R_iRi,为红灯时间(分钟)
第四行 NN 个正整数 G_iGi,为绿灯时间(分钟)
输出格式
共 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,Ai≤10,R_i,G_i\le 5Ri,Gi≤5。
【AC代码】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
inline int fread()
{
char ch=getchar();
int n=0,m=1;
while(ch<'0' or ch>'9')
{
if(ch=='-')m=-1;
ch=getchar();
}
while(ch>='0' and ch<='9')n=(n<<3)+(n<<1)+ch-48,ch=getchar();
return n*m;
}
int n,m,a[N],r[N],g[N],b[N],x;
signed main(int argc,char **argv)
{
n=fread(),m=fread();
for(int i=1;i<n;i++)a[i]=fread();
for(int i=1;i<=n;i++)r[i]=fread();
for(int i=1;i<=n;i++)g[i]=fread(),b[i]=r[i]+g[i];
for(int i=1;i<=n;i++)
{
m+=a[i-1],x=m%b[i];
if(x>g[i])m+=b[i]-x;
cout<<m<<"\n";
}
return 0;
}