这是我遇到的最坑的第二题/(ㄒoㄒ)/~~
1.首先必须读清题目介绍的K的值对应的灯的颜色,K=1、2、3分别对应红、黄、绿;
其次应该明白红绿灯的变化顺序,红绿黄交替变化,千万不要按着K值对应的顺序走啊,我错了好久才发现。
2.做的时候找到了一个不会编译报错但其实语义不对的写法:
if(0<t1&&t1<=r) //√
if(0<t1<=r) //×
3.注意要用long long定义变量。
100分的代码如下
#include<iostream>
using namespace std;
int main()
{
long long n,k,t,r,y,g,tt,t1,s=0;
cin>>r>>y>>g;
cin>>n;
while(n--)
{
tt=r+y+g;
cin>>k>>t;
if(k==0)
s+=t;
if(k==1)
{
t1=(s+(r-t))%tt;
if(0<t1&&t1<=r)
s+=(r-t1);
if(r<t1&&t1<=(r+g))
s+=0;
if(r+g<t1&&t1<=r+y+g)
s+=r+tt-t1;
}
if(k==2)
{
t1=(s+tt-t)%tt;
if(0<t1&&t1<=r)
s+=(r-t1);
if(r<t1&&t1<=(r+g))
s+=0;
if(r+g<t1&&t1<=r+y+g)
s+=r+tt-t1;
}
if(k==3)
{
t1=(s+r+g-t)%tt;
if(0<t1&&t1<=r)
s+=(r-t1);
if(r<t1&&t1<=(r+g))
s+=0;
if(r+g<t1&&t1<=r+y+g)
s+=r+tt-t1;
}
}
cout<<s<<endl;
return 0;
}