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)) |
English