summaryrefslogblamecommitdiffstats
path: root/šola/p1/dn/DN11_63230317.java
blob: d78823dcfd41dfedb13696545ac4b7cfa90a080b (plain) (tree)

















































































































































                                                                                                                                                         
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];
		}
	}
}