summaryrefslogtreecommitdiffstats
path: root/šola/p1/dn/DN11_63230317.java
blob: d78823dcfd41dfedb13696545ac4b7cfa90a080b (plain) (blame)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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];
		}
	}
}