import sys
def czy_mozna_usunac(x, y, klocki):
"""Sprawdza, czy klocek na (x, y) można usunąć."""
brak_pionowych = (x - 1, y) not in klocki and (x + 1, y) not in klocki
brak_poziomych = (x, y - 1) not in klocki and (x, y + 1) not in klocki
return brak_pionowych or brak_poziomych
def policz_usuwalne(klocki):
"""Zwraca liczbę usuwalnych klocków na podstawie ich konfiguracji, usuwając je aż nie będzie więcej."""
usuwalne = set()
# Dodajemy do zbioru wszystkie klocki, które mogą być usunięte
for x, y in klocki:
if czy_mozna_usunac(x, y, klocki):
usuwalne.add((x, y))
liczba_usunietych = 0
while usuwalne:
# Usuwamy klocki dopóki możemy coś usunąć
for klocek in usuwalne:
klocki.remove(klocek)
liczba_usunietych += 1
usuwalne.clear()
# Ponownie sprawdzamy, które klocki są usuwalne
for x, y in klocki:
if czy_mozna_usunac(x, y, klocki):
usuwalne.add((x, y))
return liczba_usunietych # Zwracamy liczbę usuniętych klocków
# Wczytywanie danych
n, m, k, q = map(int, sys.stdin.readline().split())
# Przechowujemy klocki w zbiorze
klocki = set()
for _ in range(k):
x, y = map(int, sys.stdin.readline().split())
klocki.add((x, y))
dodatkowe_klocki = []
# Obsługa zapytań
for _ in range(q):
x, y = map(int, sys.stdin.readline().split())
dodatkowe_klocki.append((x, y))
# bez dodawania klocków
print(policz_usuwalne(klocki))
# po dodawaniu/usuwaniu poszczególnych klocków
for x, y in dodatkowe_klocki:
if (x, y) in klocki:
klocki.remove((x, y)) # Usuwamy klocek
else:
klocki.add((x, y)) # Dodajemy klocek
# Obliczamy liczbę usuwalnych klocków po każdej zmianie
print(policz_usuwalne(klocki))
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 | import sys def czy_mozna_usunac(x, y, klocki): """Sprawdza, czy klocek na (x, y) można usunąć.""" brak_pionowych = (x - 1, y) not in klocki and (x + 1, y) not in klocki brak_poziomych = (x, y - 1) not in klocki and (x, y + 1) not in klocki return brak_pionowych or brak_poziomych def policz_usuwalne(klocki): """Zwraca liczbę usuwalnych klocków na podstawie ich konfiguracji, usuwając je aż nie będzie więcej.""" usuwalne = set() # Dodajemy do zbioru wszystkie klocki, które mogą być usunięte for x, y in klocki: if czy_mozna_usunac(x, y, klocki): usuwalne.add((x, y)) liczba_usunietych = 0 while usuwalne: # Usuwamy klocki dopóki możemy coś usunąć for klocek in usuwalne: klocki.remove(klocek) liczba_usunietych += 1 usuwalne.clear() # Ponownie sprawdzamy, które klocki są usuwalne for x, y in klocki: if czy_mozna_usunac(x, y, klocki): usuwalne.add((x, y)) return liczba_usunietych # Zwracamy liczbę usuniętych klocków # Wczytywanie danych n, m, k, q = map(int, sys.stdin.readline().split()) # Przechowujemy klocki w zbiorze klocki = set() for _ in range(k): x, y = map(int, sys.stdin.readline().split()) klocki.add((x, y)) dodatkowe_klocki = [] # Obsługa zapytań for _ in range(q): x, y = map(int, sys.stdin.readline().split()) dodatkowe_klocki.append((x, y)) # bez dodawania klocków print(policz_usuwalne(klocki)) # po dodawaniu/usuwaniu poszczególnych klocków for x, y in dodatkowe_klocki: if (x, y) in klocki: klocki.remove((x, y)) # Usuwamy klocek else: klocki.add((x, y)) # Dodajemy klocek # Obliczamy liczbę usuwalnych klocków po każdej zmianie print(policz_usuwalne(klocki)) |
English