def znajdz_podzialy_z_liderami(a): lider = None licznik = 0 # Znalezienie lidera całego ciągu for liczba in a: if licznik == 0: lider = liczba licznik += 1 elif lider == liczba: licznik += 1 else: licznik -= 1 # Sprawdzenie, czy znaleziony lider jest faktycznym liderem if a.count(lider) <= len(a) // 2: # Nie ma lidera całego ciągu, więc nie możemy podzielić ciągu na wymagane podciągi return 0 # Zliczanie podziałów z liderem liczba_podzialow = 0 aktualna_liczba_liderow = 0 for i, liczba in enumerate(a): if liczba == lider: aktualna_liczba_liderow += 1 if aktualna_liczba_liderow > (i + 1) // 2 and (a.count(lider) - aktualna_liczba_liderow) > (len(a) - i - 1) // 2: liczba_podzialow += 1 aktualna_liczba_liderow = 0 # Reset licznika liderów dla nowego podciągu return liczba_podzialow # Przykład użycia n = 5 a = [1, 2, 3, 1, 2] print(znajdz_podzialy_z_liderami(a))
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 | def znajdz_podzialy_z_liderami(a): lider = None licznik = 0 # Znalezienie lidera całego ciągu for liczba in a: if licznik == 0: lider = liczba licznik += 1 elif lider == liczba: licznik += 1 else: licznik -= 1 # Sprawdzenie, czy znaleziony lider jest faktycznym liderem if a.count(lider) <= len(a) // 2: # Nie ma lidera całego ciągu, więc nie możemy podzielić ciągu na wymagane podciągi return 0 # Zliczanie podziałów z liderem liczba_podzialow = 0 aktualna_liczba_liderow = 0 for i, liczba in enumerate(a): if liczba == lider: aktualna_liczba_liderow += 1 if aktualna_liczba_liderow > (i + 1) // 2 and (a.count(lider) - aktualna_liczba_liderow) > (len(a) - i - 1) // 2: liczba_podzialow += 1 aktualna_liczba_liderow = 0 # Reset licznika liderów dla nowego podciągu return liczba_podzialow # Przykład użycia n = 5 a = [1, 2, 3, 1, 2] print(znajdz_podzialy_z_liderami(a)) |