#!/usr/bin/env python3 # Formát vstupu: N čísel oddělených mezerou na jednom řádku představujících # výšky jednotlivých budov # Seznam vertikálně prohledávaných budov vertikalne = [] # Počet horizontálně prohledávaných pater horizontalne = 0 # 1. Načtení vstupu: vysky = list(map(int, input().split())) N = len(vysky) # Připravíme si přihrádky - každá přihrádka je seznam budov této výšky prihradky = [[] for i in range(N + 1)] for i in range(N): if vysky[i] > N: vertikalne.append(i) else: prihradky[vysky[i]].append(i) # 2. Projdeme přihrádky a najdeme nejlepší hranici horizontálně/vertikálně # prohledávané oblasti: minimum = N # Nalezené optimum počtu týmů - na začátku každá budova ~ 1 tým budov_pod = 0 # Počet budov <= aktuální výška for vyska in range(N + 1): # Zkusíme hranici až nad těmito budovami budov_pod += len(prihradky[vyska]) if minimum > vyska + (N - budov_pod): minimum = vyska + (N - budov_pod) horizontalne = vyska # 3. Posbíráme zbylé budovy nad hranicí a vypíšeme výsledek: for vyska in range(horizontalne + 1, N + 1): # Připojí všechny prvky z pole na konec jiného vertikalne.extend(prihradky[vyska]) print(minimum, "týmů: horizontálně projít spodních", horizontalne, "pater, vertikálně projít budovy:", vertikalne)