小明放学 正确答案,以红灯为基点进行计算。 import java.util.Scanner; public class ccf181202 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long r = sc.nextInt(); long y = sc.nextInt(); long g = sc.nextInt(); long ryg = r+y+g; long pasy = sc.nextInt(); long passmin = 0L; for (int i = 0; i < pasy; i++) { int a = sc.nextInt(); long sceond = sc.nextInt(); if (a!=0) { if (passmin-sceond>=0) { long mid=passmin-sceond; long left=0; if (a==1) { left = mid%ryg; if (left>=g) { passmin +=ryg-left; } }else if (a==2) { left = mid%ryg; if (left<r) { passmin +=r-left; }else if (left>=(r+g)) { passmin +=ryg-left; } }else { left = mid%ryg; if (left<(r+y)) { passmin +=(r+y)-left; } } }else { switch (a) { case 1: passmin +=sceond-passmin; break; case 2: passmin +=sceond-passmin; break; } } }else { passmin +=sceond; } } System.out.print(passmin); } }