summaryrefslogtreecommitdiffstats
path: root/šola/p1/dn/DN11_63230317.java
diff options
context:
space:
mode:
Diffstat (limited to 'šola/p1/dn/DN11_63230317.java')
-rw-r--r--šola/p1/dn/DN11_63230317.java146
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];
+ }
+ }
+}