diff options
Diffstat (limited to 'šola/p1/dn/DN11_63230317.java')
-rw-r--r-- | šola/p1/dn/DN11_63230317.java | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/šola/p1/dn/DN11_63230317.java b/šola/p1/dn/DN11_63230317.java new file mode 100644 index 0000000..d78823d --- /dev/null +++ b/šola/p1/dn/DN11_63230317.java @@ -0,0 +1,146 @@ +import java.util.*; +public class DN11_63230317 { + static class Rezultat { + String tekmovalec; + String država; + String disciplina; + int točke; + public Rezultat (String te, String dr, String di, int to) { + tekmovalec = te; + država = dr; + disciplina = di; + točke = to; + } + static class Primerjalnik implements Comparator<Rezultat> { + int pravila[]; + boolean obratno[]; + public Primerjalnik (int[] p, boolean[] o) { + pravila = p; + obratno = o; + } + @Override + public int compare (Rezultat a, Rezultat b) { + for (int i = 0; i < pravila.length; i++) { + if (pravila[i] == 0) { + int r = a.tekmovalec.compareTo(b.tekmovalec); + if (r != 0) + return obratno[i] ? -r : r; + } + if (pravila[i] == 1) { + int r = a.država.compareTo(b.država); + if (r != 0) + return obratno[i] ? -r : r; + } + if (pravila[i] == 2) { + int r = a.disciplina.compareTo(b.disciplina); + if (r != 0) + return obratno[i] ? -r : r; + } + if (pravila[i] == 3) { + int r = Integer.compare(a.točke, b.točke); + if (r != 0) + return obratno[i] ? -r : r; + } + } + return 0; + } + } + } + static class Trojka implements Comparable<Trojka> { // zares Nka + int[] trojka; + public Trojka (int[] a) { + trojka = a; + } + @Override + public int compareTo (Trojka o) { + if (o.trojka.length < trojka.length) + return -1; + if (o.trojka.length > trojka.length) + return 1; + for (int i = 0; i < trojka.length; i++) + if (Integer.compare(trojka[i], o.trojka[i]) != 0) + return Integer.compare(trojka[i], o.trojka[i]); + return 0; + } + } + public static void main (String[] args) { + Scanner sc = new Scanner(System.in); + int n = sc.nextInt(); + int u = sc.nextInt(); + ArrayList<Rezultat> rezultati = new ArrayList<>(); + for (int i = 0; i < n; i++) { + String tekmovalec = sc.next(); + String država = sc.next(); + String disciplina = sc.next(); + int točke = sc.nextInt(); + rezultati.add(new Rezultat(tekmovalec, država, disciplina, točke)); + } + String prejšnja = ""; + String prejšnji = ""; + switch (u) { + case 1: + Collections.sort(rezultati, new Rezultat.Primerjalnik(new int[]{1, 0, 2, 3}, new boolean[]{false, false, false, false})); + for (Rezultat rezultat : rezultati) { + if (!prejšnja.equals(rezultat.država)) { + System.out.println("[" + rezultat.država + "]"); + prejšnja = rezultat.država; + prejšnji = ""; + } + if (!prejšnji.equals(rezultat.tekmovalec)) + System.out.println(" " + rezultat.tekmovalec); + prejšnji = rezultat.tekmovalec; + } + break; + case 2: + Collections.sort(rezultati, new Rezultat.Primerjalnik(new int[]{2, 3, 0, 1}, new boolean[]{false, true, false, false})); + for (Rezultat rezultat : rezultati) { + if (!prejšnja.equals(rezultat.disciplina)) { + System.out.println("[" + rezultat.disciplina + "]"); + prejšnja = rezultat.disciplina; + } + System.out.println(" " + rezultat.tekmovalec + " " + rezultat.država + " " + rezultat.točke); + } + break; + case 3: + Collections.sort(rezultati, new Rezultat.Primerjalnik(new int[]{2, 3, 0, 1}, new boolean[]{false, true, false, false})); + Map<String, Trojka> države = new TreeMap<>(); + int i = 0; + for (Rezultat rezultat : rezultati) { + if (!prejšnja.equals(rezultat.disciplina)) { + prejšnja = rezultat.disciplina; + i = 0; + } + Trojka cur = države.get(rezultat.država); + if (cur == null) { + cur = new Trojka(new int[]{0, 0, 0}); + države.put(rezultat.država, cur); + } + if (i < 3) + cur.trojka[i++]++; + } + ArrayList<Država> urejeneDržave = new ArrayList<>(); + for (String key : države.keySet()) + urejeneDržave.add(new Država(key, države.get(key))); + Collections.sort(urejeneDržave); + for (Država država : urejeneDržave) + System.out.println(država); + break; + } + } + static class Država implements Comparable<Država> { + String ime; + Trojka medalje; + public Država (String i, Trojka m) { + ime = i; + medalje = m; + } + @Override + public int compareTo (Država o) { + return -medalje.compareTo(o.medalje); + } + @Override + public String toString () { + return ime + " " + medalje.trojka[0] + " " + medalje.trojka[1] + " " + medalje.trojka[2]; + } + } +} |