2018-12-2 CCF 小明放学 java

题目描述:
2018-12-2 CCF 小明放学 java_第1张图片

首先红绿灯的顺序 为 红 > 绿 > 黄 > 红。弄明白这个顺序就好往后做题了。
因为红绿黄灯存在循环关系,所以我们要确定当前时间处在哪一个时间段内。因此可以把这个问题抽象为 在数轴上的区间

import java.util.Scanner;

public class Main{

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
		// 红灯时间
        long r = scanner.nextInt();
        // 黄灯时间
        long y = scanner.nextInt();
        // 绿灯时间
        long g = scanner.nextInt();
        int n = scanner.nextInt();
        int[][] arr = new int[n][2];
        for (int i = 0; i < n; i++) {
            arr[i][0] = scanner.nextInt();
            arr[i][1] = scanner.nextInt();
        }
        System.out.println(wait(arr, r, y, g));
    }

    public static long wait(int[][] arr, long r, long y, long g) {
        int length = arr.length;
        long sum = 0;
        for (int i = 0; i < length; i++) {
        // 当前道路不存在红绿灯
            if (arr[i][0] == 0) {
                sum = sum + arr[i][1];
            }
            // 为红灯时
            if (arr[i][0] == 1) {
            	// 红绿黄总时间 求余数 判断处于哪一个区间。
                long r1 = (sum - arr[i][1]) %(r+y+g);
                if (r1 <= 0) {
                	// 位于红灯区间
                    sum = sum - r1;
                } else if (r1 > g) {
                	// 处于黄灯和红灯区间
                    sum = sum + r+y+g - r1;
                }
            }
            // 黄灯
            if (arr[i][0] == 2) {
                long r1 = (sum - arr[i][1]) %(r+y+g);
                // 处于红灯区间
                if (r1 <= r) {           
                    sum = sum + r - r1;
                } else if (r1 > r + g) {
                	// 位于 黄灯区间 还要加上接下来的 红灯等待时间
                    sum = sum + r + y + g - r1 + r;
                }
            }
            // 绿灯
            if (arr[i][0] == 3) {
                long r1 = (sum - arr[i][1]) % (r+y+g);
                if (r1 > 0) {
                    if (r1 <= r + y) {
                        sum = sum + y+r - r1;
                    }
                }
            }
        }
        return sum;
    }
}

你可能感兴趣的:(java,算法)