先贴上思路和代码吧,然后题目描述在最后:
【思路】:先在纸上把红绿灯的周期图画出来,就是一个一维的时间轴,从左到右依次是红、黄、绿,然后时间是往左走的,这样的话感觉写起来顺手一些。那么,给你一个type(红、黄、还是绿),你首先在周期中标出它的位置,然后根据已经用掉的时间推出到该红绿灯的位置,就比如,一开始在绿灯,停留在2秒,红绿黄的周期都是3,那么你的x坐标就是3+3+2=8,然后假如你之前用了7秒,直接8-7=1, 1是属于红灯区间,所以你需要等1秒。
那么如果不够当前x坐标不够减怎么办,直接取余就行了,因为它是循环的,costTime取余一下,然后再用x坐标去剪
另外,数据范围可能超过int,最好用long long
看了看网上别人的代码,发现都好长,我的就几段话
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
ll red,yellow,green;
ll n;
cin>>red>>yellow>>green;
cin>>n;
ll type,time;
ll timeCost = 0;
ll period = red+yellow+green;
for( int i = 1 ; i <= n ; i++ )