#!/usr/bin/python3 """ Kód řešení dle popisu z textového řešení úlohy. Poznámka autora k strukturování kódu: Tento kód je psaný tak, aby šel přečíst odzhora dolů a odpovídal textu řešení. Prakticky by ale bylo mnohem lepší rozdělit jeho části na funkce. Například posun času na konci cyklu nijak nesouvisí s frontami a přímo si o to říká. Pište pěkný kód a používejte funkce. Ne jako já tady... ;) """ from collections import deque N = int(input()) fronta_C = deque() fronta_L = deque() # Načteme celý vstup a rozdělíme si ho rovnou do dvou front for i in range(N): cas, typ = input().split() cas = int(cas) if typ == "C": fronta_C.append(cas) else: fronta_L.append(cas) cas = 0 # aktuální čas obslouzeno = 0 # počet obsloužených zákazníků # simulace běží pořád, dokud nevezmeme posledního zákazníka while True: # Z front nejprve odejdou zákazníci, kteří čekají moc dlouho while len(fronta_C) > 0 and fronta_C[0] <= cas - 10: _ = fronta_C.popleft() while len(fronta_L) > 0 and fronta_L[0] <= cas - 10: _ = fronta_L.popleft() # Pokud v daném čase máme zákazníka na čaj, tak vezmeme jeho... if len(fronta_C) > 0 and fronta_C[0] <= cas: _ = fronta_C.popleft() obslouzeno += 1 # Jinak vezmeme zákazníka na limo, pokud takový existuje... elif len(fronta_L) > 0 and fronta_L[0] <= cas: _ = fronta_L.popleft() obslouzeno += 1 # Pokud jsme zpracovali posledního zákazníka a další není, končíme if len(fronta_C) == 0 and len(fronta_L) == 0: break # Podíváme se v čase dopředu, kdy má přijít nejbližší další zákazník if len(fronta_C) == 0: dalsi = fronta_L[0] # pokud je fronta na čaj prázdná, někdo musí čekat na limo elif len(fronta_L) == 0: dalsi = fronta_C[0] # pokud je prázdná fronta na limo, někdo musí čekat na čaj else: dalsi = min(fronta_L[0], fronta_C[0]) # Pokud další nezpracovaný zákazník už čeká, tak posuneme čas pouze o jednu minutu if dalsi <= cas: cas += 1 # ...jinak skočíme v čase na dalšího zákazníka else: cas = dalsi print(obslouzeno)