I lazily figured out weather a given nubmer was good enough or not by trying all combinations. I’m sure there’s a better (greedy) way to do this that involves less work. Greedy doesn’t always work, but though so be careful! I messed up twice by trying a greedy strategy and gave up when I got tired of finding something that has no counterexamples.
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
/**
*
* @author Sanchit M. Bhatnagar
* @see http://uhunt.felix-halim.net/id/74004
*
*/
public class P12247 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
while (sc.hasNext()) {
int[] princess = new int[] { sc.nextInt(), sc.nextInt(), sc.nextInt() };
if (princess[0] == 0)
break;
int[] prince = new int[] { -1, sc.nextInt(), sc.nextInt() };
out.println(check(princess, prince));
}
out.close();
sc.close();
}
// Cheating
private static int[][] perm = { new int[] { 0, 1, 2 }, new int[] { 0, 2, 1 }, new int[] { 1, 0, 2 }, new int[] { 1, 2, 0 }, new int[] { 2, 0, 1 }, new int[] { 2, 1, 0 } };
private static int check(int[] princess, int[] prince) {
int[] tmpPrincess = Arrays.copyOf(princess, princess.length);
int[] tmpPrince = null;
int min = 1;
boolean found = false;
for (int i = min; !found && i <= 52; i++) {
tmpPrince = Arrays.copyOf(prince, prince.length);
tmpPrince[0] = i;
if (i != tmpPrincess[0] && i != tmpPrincess[1] && i != tmpPrincess[2] && i != tmpPrince[1] && i != tmpPrince[2]) {
min = i;
// Try to lose
int count = 0;
for (int j = 0; count == 0 && j < perm.length; j++) {
int subCount = 0;
for (int k = 0; k < 3; k++) {
if (tmpPrince[perm[j][k]] > tmpPrincess[k]) {
subCount++;
}
}
if (subCount < 2)
count++;
}
if (count == 0)
found = true;
}
}
if (!found) {
return -1;
} else {
return min;
}
}
}
One thought on “UVA 12247 – Jollo”