题目
分析
还是得用取余判断的方法,最开始用while超时了,只得了80
并且要用 long long
并且黄灯不能过
并且出发时间是指最开始从0时刻开始
AC代码
#include<bits/stdc++.h>
#define N 99999
using namespace std;
struct node {
long long x,y;
};
node a[N];
int main() {
long long r,y,g;
cin>>r>>y>>g;
long long n;
cin>>n;
long long sum=0;
for(long long i=0; i<n; i++) {
cin>>a[i].x>>a[i].y;
if(a[i].x==0) {
sum+=a[i].y;
}
else if(a[i].x==1) {
if(sum<=a[i].y) { //刚好遇到红灯
sum=a[i].y;
} else {// 绿 黄 红
long long num=(sum-a[i].y)%(r+g+y);
if(num>g)
sum+=(r+g+y-num);
}
}
else if(a[i].x==2) {//黄灯
if(sum<=a[i].y){
sum=a[i].y+r;
}
else{ //r g y
long long num=(sum-a[i].y)%(r+g+y);
if(num<=r)
sum+=r-num;
else if(num>r+g)
sum+=(r+g+y-num+r);
}
}
else if(a[i].x==3) {
if(sum>a[i].y) {
// y r g
long long num=(sum-a[i].y)%(r+g+y);
if(num<=y+r)
sum+=r+y-num;
}
}
}
cout<<sum<<endl;
}