import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main02 {
// 此题需要注意的是:
// 1.题目给出的都是出发时刻的红绿灯情况,所以需要根据r,y,g的值计算出到达路口时的红绿灯情况
// 2.csp的题目特别喜欢在大数上做文章,所以看到规模超过10^3果断用long
public static long[] judge(long i,long r,long g,long y) {
// i是距离0时刻的时间
long cir=r+g+y;
i=i%cir;
long[] resType=new long[2];
if(i>=0 && i<r) {resType[0]=1; resType[1]=r-i;}
else if(i>=r && i<r+g) {resType[0]=3; resType[1]=r+g-i;}
else {resType[0]=2; resType[1]=cir-i;}
return resType;
}
public static long[] curLight(long k,long t,long r,long g,long y,long past) {
if(k==1) {
past+=r-t;
}
else if(k==3) {
past+=r+g-t;
}
else if(k==2) {
past+=r+g+y-t;
}
return judge(past,r,g,y);
}
public static void main(String[] args) {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String[] r1;
try {
r1 = br.readLine().split(" ");
long r=Integer.parseInt(r1[0]);//红灯设置
long y=Integer.parseInt(r1[1]);//黄灯设置
long g=Integer.parseInt(r1[2]);//绿灯设置
long n=Integer.parseInt(br.readLine());
long sum=0;
for(long i=0;i<n;i++) {
String[] temp=br.readLine().split(" ");
int k=Integer.parseInt(temp[0]);//出发时什么刻灯
// k=1红灯 k=2黄灯 k=3绿灯
long t=Integer.parseInt(temp[1]);//出发时刻灯还剩多少秒到下一个灯
if(k==0) sum+=t;
else {
long curK=curLight(k,t,r,g,y,sum)[0];
long curT=curLight(k,t,r,g,y,sum)[1];
if(curK==1) sum+=curT;
else if(curK==2) sum+=curT+r;
}
}
System.out.println(sum);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ccfcsp-20181202-小明放学-JAVA语言
最新推荐文章于 2023-12-06 16:53:01 发布