题目描述
在一个城市,有一条笔直的公路,在这条公路上有N个十字路口,每个路口都设有一个红绿灯,已知相邻的两个路口距离为Ai千米(1≤i<N),每个路口的红灯时间为Ri,绿灯时间为Gi,没有黄灯,现在有一辆车从距离1号十字路口M千米的位置出发,且此时所有路口的红绿灯刚好从红灯跳到绿灯,问这辆车通过每个路口的时间(不能闯红灯,这辆车的速度为1千米每分钟)。
输入输出格式
输入格式:
第一行两个正整数N和M
第二行N-1个正整数Ai
第三行N个正整数Ri,为红灯时间(分钟)
第四行N个正整数Gi,为绿灯时间(分钟)
思路 : 因为是一道纯模拟的题, 思路我就以后有时间再写吧.题太简单...代码写的不够简洁以后再优化吧.
另一点,输入,输出可以使用scanf和printf进行常数优化.
#include <iostream>
using namespace std;
int dis[100005];
int green[100005];
int red[100005];
int main() {
int n, m;
cin >> n >> m;
dis[0] = m;
int time = 0;
for(int i = 1; i < n ; i++) {
cin >> dis[i];
}
for(int i = 0; i < n ; i++) {
cin >> red[i];
}
for (int i = 0; i < n; ++i) {
cin >> green[i];
}
for(int i = 0; i < n ; i++) {
time += dis[i];
int tmp = time % (red[i] + green[i]);
if( tmp > green[i] ) time += red[i] - (tmp - green[i]);
cout << time << endl;
}
return 0;
}