#!/usr/bin/python3 # Formát vstupu: # Na prvním řádku čísla R, S, K a Z oddělená mezerou: # - R a S jsou rozměry tabulky # - K počet skupin # - Z počet změn # Na dalších Z řádcích je vždy dvojice čísel (x, l) udávající, že skupina # x získala předmět na dobu l # 1. Načtení vstupu: (R, S, K, Z) = map(int, input().split()) vrcholy = [] class Vrchol: def __init__(self, skupina, delka): self.skupina = skupina self.delka = delka self.sousede = [] self.prohledano = False vrcholy.append(self) radky = [] radek = [] delka = 0 # Načteme a rozsekáme po koncích řádků for i in range(Z): if delka == S: radky.append(radek) radek = [] delka = 0 (x, l) = map(int, input().split()) while delka + l > S: zbytek = S - delka radek.append(Vrchol(x, zbytek)) l -= zbytek radky.append(radek) radek = [] delka = 0 radek.append(Vrchol(x, l)) delka += l if delka > 0: radky.append(radek) # 2. Postavíme graf řádek po řádku minuly = [Vrchol(-1, S)] # oblast nepatřící žádné skupině délky S for radek in radky: zacatek_minuly = 0 m = 0 # Index v minulém řádku zacatek_tento = 0 i = 0 # Index v tomto řádku while i < len(radek) and m < len(minuly): if zacatek_tento + radek[i].delka < zacatek_minuly: zacatek_tento += radek[i].delka i += 1 elif zacatek_minuly + minuly[m].delka < zacatek_tento: zacatek_minuly += minuly[m].delka m += 1 else: # Oblasti se dotýkají if minuly[m].skupina == radek[i].skupina: minuly[m].sousede.append(radek[i]) radek[i].sousede.append(minuly[m]) if zacatek_minuly + minuly[m].delka < zacatek_tento + radek[i].delka: zacatek_minuly += minuly[m].delka m += 1 else: zacatek_tento += radek[i].delka i += 1 minuly = radek # 3. Pustíme DFS z každého vrcholu a hledáme největší oblast maximum = 0 nejvetsiOblast = None def prohledej(vrchol): vrchol.prohledano = True policek = vrchol.delka for soused in vrchol.sousede: if not soused.prohledano: policek += prohledej(soused) return policek for vrchol in vrcholy: if vrchol.prohledano: continue m = prohledej(vrchol) if m > maximum: maximum = m nejvetsiOblast = vrchol print("Největší oblast má skupina", nejvetsiOblast.skupina, "o velikosti", maximum)