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
liczbaCiagow = 1
czyLider = False

def sprawdzLidera(wystapienia, ciagWejsciowy):
    if wystapienia > len(ciagWejsciowy)-wystapienia: return True
    else: return False

def podzielTablice(wystapienia, liczbaMax, tablica2d):
    nowa1 = []
    nowa2 = []
    for i in range(wystapienia):
        nowa1.append(liczbaMax)
    for i in range(len(tablica2d)):
        if tablica2d[i][0] == liczbaMax:
            tablica2d[i][1] = 0
    aktualnaIlosc = 1
    wlozone = 0
    lenPocz = len(nowa1)
    while wlozone != lenPocz-1:
        for i in range(len(tablica2d)):
            if tablica2d[i][1] == aktualnaIlosc:
                while tablica2d[i][1] != 0 and wlozone != lenPocz-1:
                    nowa1.append(tablica2d[i][0])
                    tablica2d[i][1] -= 1
                    wlozone +=1
        aktualnaIlosc +=1

    for i in range(len(tablica2d)):
        if tablica2d[i][1] != 0:
            for j in range(tablica2d[i][1]):
                nowa2.append(tablica2d[i][0])
    return tablica2d, nowa2


def znajdzMaxa(tablica2d):
    liczbaMax = tablica2d[0][0]
    wystapienia = tablica2d[0][1]
    for i in range(len(tablica2d)):
        if tablica2d[i][1] > wystapienia:
            wystapienia = tablica2d[i][1]
            liczbaMax = tablica2d[i][0]
    return wystapienia, liczbaMax

def liczWystapienia(ciag):
    licznik = {}
    dwuwymiarowa_tablica = []
    for liczba in ciag:
        if liczba in licznik:
            licznik[liczba] += 1
        else:
            licznik[liczba] = 1
    for liczba, wystapienia in licznik.items():
        dwuwymiarowa_tablica.append([liczba, wystapienia])
    return dwuwymiarowa_tablica



dlugosc = int(input())
ciag = input()
ciagWejsciowy = [int(x) for x in ciag.split()]

tab2d = liczWystapienia(ciagWejsciowy)
Wystapienia, LiczbaMax = znajdzMaxa(tab2d)
czyLider = sprawdzLidera(Wystapienia, ciagWejsciowy)
while czyLider == False:
    tab2d, nowaTablica = podzielTablice(Wystapienia, LiczbaMax, tab2d)
    liczbaCiagow+=1
    tab2d = liczWystapienia(nowaTablica)
    Wystapienia, LiczbaMax = znajdzMaxa(tab2d)
    czyLider = sprawdzLidera(Wystapienia, nowaTablica)
print(liczbaCiagow)