Untitled
unknown
plain_text
2 years ago
2.8 kB
5
Indexable
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class Solution { static int n, gate[][], visit[], seat[], dis, min; public static void main(String[] args) throws FileNotFoundException { // TODO Auto-generated method stub System.setIn(new FileInputStream("src/input.txt")); Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for (int tc = 1; tc <= T; tc++) { n = sc.nextInt(); gate = new int[3][2]; for (int i = 0; i < 3; i++) { gate[i][0] = sc.nextInt(); gate[i][1] = sc.nextInt(); } seat = new int[n + 1]; for (int i = 1; i <= n; i++) { seat[i] = -1; } visit = new int[3]; dis = 0; min = 1000; open(); System.out.println("Case #" + tc); System.out.println(min); } sc.close(); } private static void open() { // TODO Auto-generated method stub if(dis>=min) return; if (check()) { min = dis < min ? dis : min; return; } for (int g = 0; g < 3; g++) { if (visit[g] == 0) { visit[g] = 1; int tmp = dis; int l, r; for (int i = 1; i <= gate[g][1] - 1; i++) { l = getLeft(gate[g][0]); r = getRight(gate[g][0]); if (l <= r) { seat[gate[g][0] - l] = g; dis += l + 1; } else { seat[gate[g][0] + r] = g; dis += r + 1; } } // last person l = getLeft(gate[g][0]); r = getRight(gate[g][0]); if (l < r) { seat[gate[g][0] - l] = g; dis += l + 1; open(); } else if (l > r) { seat[gate[g][0] + r] = g; dis += r + 1; open(); } else { for (int j = 0; j < 2; j++) { int tmp2; if (j == 0) { tmp2 = dis; dis += l + 1; seat[gate[g][0] - l] = g; open(); dis = tmp2; seat[gate[g][0] - l] = -1; } else { tmp2 = dis; dis += r + 1; seat[gate[g][0] + r] = g; open(); dis = tmp2; seat[gate[g][0] + r] = -1; } } } dis = tmp; for (int i = 1; i <= n; i++) { if (seat[i] == g) { seat[i] = -1; } } visit[g] = 0; } } } private static boolean check() { // TODO Auto-generated method stub for (int i = 0; i < 3; i++) { if (visit[i] == 0) return false; } return true; } private static int getRight(int s) { // TODO Auto-generated method stub for (int i = s; i <= n; i++) { if (seat[i] == -1) { return i - s; } } return 10000; } private static int getLeft(int s) { // TODO Auto-generated method stub for (int i = s; i >= 1; i--) { if (seat[i] == -1) { return s - i; } } return 10000; } }
Editor is loading...
Leave a Comment