import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.stream.IntStream;
public class kar {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
int t = scanner.nextInt();
for (int i = 0; i < t; i++) {
Boolean score = eval(scanner);
System.out.println(score != null ? (score ? "WYGRANA" : "PRZEGRANA") : "REMIS");
}
}
}
private static Boolean eval(Scanner scanner) {
int a, b;
Boolean w;
int n = scanner.nextInt();
int m = scanner.nextInt();
Boolean[][] cards = new Boolean[n][n];
for (int i = 0; i < m; i++) {
a = scanner.nextInt();
w = parse(scanner.next());
b = scanner.nextInt();
cards[a - 1][b - 1] = w;
}
return eval(n, cards);
}
private static Boolean eval(int n, Boolean[][] cards) {
int[] scores = new int[n];
int deck, max;
Set<Integer> decks1 = new HashSet<>();
IntStream.range(0, n).forEach(decks1::add);
Set<Integer> decks2 = new HashSet<>(decks1);
for (int t = 1; t < n; t++) {
for (int i = 0; i < n; i++) {
scores[i] = 0;
for (int j = 0; j < n; j++) {
if (decks1.contains(j) && decks2.contains(i)) {
scores[i] -= val(cards[j][i]);
}
}
}
deck = decks2.iterator().next();
max = scores[deck];
for (int i = 1; i < n; i++) {
if (decks2.contains(i) && scores[i] > max) {
max = scores[i];
deck = i;
}
}
decks2.remove(deck);
for (int i = 0; i < n; i++) {
scores[i] = 0;
for (int j = 0; j < n; j++) {
if (decks1.contains(i) && decks2.contains(j)) {
scores[i] += val(cards[i][j]);
}
}
}
deck = decks1.iterator().next();
max = scores[deck];
for (int i = 1; i < n; i++) {
if (decks1.contains(i) && scores[i] > max) {
max = scores[i];
deck = i;
}
}
decks1.remove(deck);
}
int d1 = decks1.iterator().next();
int d2 = decks2.iterator().next();
return cards[d1][d2];
}
private static int val(Boolean b) {
return b != null ? (b ? 1 : -1) : 0;
}
private static Boolean parse(String s) {
switch (s) {
case ">":
return true;
case "<":
return false;
}
return null;
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | import java.util.HashSet; import java.util.Scanner; import java.util.Set; import java.util.stream.IntStream; public class kar { public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { int t = scanner.nextInt(); for (int i = 0; i < t; i++) { Boolean score = eval(scanner); System.out.println(score != null ? (score ? "WYGRANA" : "PRZEGRANA") : "REMIS"); } } } private static Boolean eval(Scanner scanner) { int a, b; Boolean w; int n = scanner.nextInt(); int m = scanner.nextInt(); Boolean[][] cards = new Boolean[n][n]; for (int i = 0; i < m; i++) { a = scanner.nextInt(); w = parse(scanner.next()); b = scanner.nextInt(); cards[a - 1][b - 1] = w; } return eval(n, cards); } private static Boolean eval(int n, Boolean[][] cards) { int[] scores = new int[n]; int deck, max; Set<Integer> decks1 = new HashSet<>(); IntStream.range(0, n).forEach(decks1::add); Set<Integer> decks2 = new HashSet<>(decks1); for (int t = 1; t < n; t++) { for (int i = 0; i < n; i++) { scores[i] = 0; for (int j = 0; j < n; j++) { if (decks1.contains(j) && decks2.contains(i)) { scores[i] -= val(cards[j][i]); } } } deck = decks2.iterator().next(); max = scores[deck]; for (int i = 1; i < n; i++) { if (decks2.contains(i) && scores[i] > max) { max = scores[i]; deck = i; } } decks2.remove(deck); for (int i = 0; i < n; i++) { scores[i] = 0; for (int j = 0; j < n; j++) { if (decks1.contains(i) && decks2.contains(j)) { scores[i] += val(cards[i][j]); } } } deck = decks1.iterator().next(); max = scores[deck]; for (int i = 1; i < n; i++) { if (decks1.contains(i) && scores[i] > max) { max = scores[i]; deck = i; } } decks1.remove(deck); } int d1 = decks1.iterator().next(); int d2 = decks2.iterator().next(); return cards[d1][d2]; } private static int val(Boolean b) { return b != null ? (b ? 1 : -1) : 0; } private static Boolean parse(String s) { switch (s) { case ">": return true; case "<": return false; } return null; } } |
English