CCF 201812-2 小明放学 100分

红绿灯的顺序:黄→红→绿,黄+红+绿=一轮时间

每次循环根据亮灯剩余时间来判断当前的红绿灯处于一轮时间中的什么时间点

如果这个时间点大于黄灯+红灯的时间,则能直接通行,continue

否则用黄灯+红灯的时间-一轮中已经过去的时间,然后加到总时间上

#include <bits/stdc++.h>

using namespace std;

int main() {
	int r,y,g,n;
	long long sum=0;
	cin>>r>>y>>g>>n;
	int state[100001],time[100001];
	for(int i=0; i<n; i++) {
		cin>>state[i]>>time[i];

		if(state[i]==0)
			sum+=time[i];

		else if(state[i]==1) {
			if(((y+r-time[i]+(sum%(r+y+g)))%(r+y+g))>y+r)
				continue;
			else
				sum+=y+r-((y+r-time[i]+(sum%(r+y+g)))%(r+y+g));

		} else if(state[i]==2) {
			if(((y-time[i]+(sum%(r+y+g)))%(r+y+g))>y+r)
				continue;
			else
				sum+=y+r-((y-time[i]+(sum%(r+y+g)))%(r+y+g));
		}

		else if(state[i]==3) {
			if(((r+y+g-time[i]+(sum%(r+y+g)))%(r+y+g))>y+r)
				continue;
			else {
				sum+=y+r-((r+y+g-time[i]+(sum%(r+y+g)))%(r+y+g));
			}
		}
	}
	cout<<sum;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值