Untitled
unknown
java
4 years ago
5.9 kB
5
Indexable
import java.io.*; public class Main { public static int noOfDivaOneRoles = 0; public static int noOfDivaTwoRoles = 0; public static int d1Index = 0; public static int d2Index = 0; public static void main(String args[]) throws FileNotFoundException { // InputStream is = new FileInputStream("testinput.txt"); Kattio io = new Kattio(System.in, System.out); // Kattio io = new Kattio(is, System.out); int actorsUsed = 0; // Antal skådespelare som fått roller int n = io.getInt(); // Antal roller i problemet. int s = io.getInt(); // Antal scener i problemet. int k = io.getInt(); // Antal skådespelare i problemet. int rolesActors[][] = new int[n][k + 1]; int scenesRoles[][] = new int[s][n + 1]; int divaOneRoles[] = new int[n]; int divaTwoRoles[] = new int[n]; int usedActors[] = new int[n]; int sol[][] = new int[n][n + 2]; // Lösningsarray. // Fyll 2d array med alla roller och vilka skådisar som kan spela respektive // roll. int available = 0; for (int i = 0; i < n; i++) { available = io.getInt(); rolesActors[i][0] = available; // System.out.print("roleActors[" + i + "][0]: " + rolesActors[i][0] + " "); for (int j = 1; j <= available; j++) { rolesActors[i][j] = io.getInt(); // System.out.print("roleActors[" + i + "][" + j + "]: " + rolesActors[i][j] + " // "); if (rolesActors[i][j] == 1) { divaOneRoles[noOfDivaOneRoles] = i + 1; noOfDivaOneRoles++; } else if (rolesActors[i][j] == 2) { divaTwoRoles[noOfDivaTwoRoles] = i + 1; noOfDivaTwoRoles++; } } } // Fyll 2d array med alla scener och vilka roller som är i respektive scen. for (int i = 0; i < s; i++) { available = io.getInt(); scenesRoles[i][0] = available; for (int j = 1; j <= available; j++) { scenesRoles[i][j] = io.getInt(); } } int d1d2[] = new int[2]; d1d2 = getDivas(divaOneRoles, divaTwoRoles); while (checkDivaScenes(d1d2, scenesRoles)) { d1d2 = getDivas(divaOneRoles, divaTwoRoles); } sol = insertActor(d1d2[0] - 1, 1, 0, sol); sol = insertActor(d1d2[1] - 1, 2, 1, sol); usedActors[0] = 1; usedActors[1] = 2; actorsUsed += 2; int roleIndex = 2; int superActor = k + 1; boolean found = false; for (int i = 0; i < n; i++) { if (d1d2[0] == i + 1 || d1d2[1] == i + 1) { continue; } for (int j = 1; j < rolesActors[i].length; j++) { if (!checkTaken(rolesActors[i][j], usedActors)) { usedActors[roleIndex] = rolesActors[i][j]; actorsUsed++; found = true; sol = insertActor(i, rolesActors[i][j], roleIndex, sol); break; } } if (!found) { usedActors[roleIndex] = superActor; sol = insertActor(i, superActor, roleIndex, sol); superActor++; actorsUsed++; } roleIndex++; found = false; } // för debugging purposes System.out.println(actorsUsed); printSol(sol); // System.out.println("Diva 1: " + "Roll " + d1d2[0]); // System.out.println("Diva 2: " + "Roll " + d1d2[1]); io.close(); } private static void printSol(int[][] sol) { for (int i = 0; i < sol.length; i++) { for (int j = 0; j < sol[i].length; j++) { if (sol[i][j] == 0) { break; } System.out.print(sol[i][j] + " "); } System.out.println(""); } } private static int[][] insertActor(int role, int actor, int roleIndex, int[][] sol) { sol[roleIndex][0] = actor; sol[roleIndex][1] = 1; sol[roleIndex][2] = role + 1; return sol; } private static boolean checkTaken(int actor, int[] usedActors) { for (int i = 0; i < usedActors.length; i++) { if (usedActors[i] == actor) { return true; } } return false; } private static boolean checkDivaScenes(int[] d1d2, int[][] sr) { boolean dOneInScene = false; boolean dTwoInScene = false; for (int i = 0; i < sr.length; i++) { for (int j = 1; j <= sr[i][0]; j++) { if (sr[i][j] == d1d2[0]) { dOneInScene = true; } else if (sr[i][j] == d1d2[1]) { dTwoInScene = true; } if (dOneInScene == true && dTwoInScene == true) { return true; } } dOneInScene = dTwoInScene = false; } return false; } private static int[] getDivas(int[] d1r, int[] d2r) { int[] d1d2 = new int[2]; for (int i = d1Index; i < noOfDivaOneRoles; i++) { for (int j = d2Index; j < noOfDivaTwoRoles; j++) { if (d1r[i] != d2r[j]) { d1d2[0] = d1r[i]; d1d2[1] = d2r[j]; d2Index++; return d1d2; } d2Index++; } d1Index++; } return d1d2; } }
Editor is loading...