Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # citim datele de intrare
- n = int(input())
- places = []
- for i in range(1, n):
- places.append(tuple(input().split()))
- from heapq import heappush, heappop
- # initial, cavalerul se afla pe prima casuta, a omorat 0 dragoni si nu a strans nicio moneda
- counter = 1
- sum = 0
- dragons = 0
- heap = []
- sol = []
- # parcurgem fiecare casuta
- for place in places:
- counter += 1 # suntem la casuta counter
- if place[0] == 'd': # intalnim un dragon
- # adaugam in heap perechea formata din -valoarea comorii si pozitia dragonului
- heappush(heap, (-int(place[1]), counter))
- else: # intalnim o printesa
- if counter < n: # nu este ultima printesa
- # deci trebuie sa calculam cati dragoni putem omori pentru a nu ne opri aici
- allowed = int(place[1]) - dragons - 1
- # cat timp avem voie sa omoram dragoni, vom alege primele valori din heap
- while allowed > 0:
- dragons += 1
- pop = heappop(heap) # extragem din heap perechea cea mai convenabila
- sum += -pop[0] # adaugam la suma monedele castigate
- allowed -= 1 # am scapat de un dragon, deci decrementam
- sol.append(pop[1]) # adaugam la solutie pozitia dragonului
- for x in heap: # eliminam din heap restul dragonilor deoarece nu mai avem ce face cu ei
- heappop(heap)
- else: # am ajuns la ultima printesa
- for x in heap: # acum putem elimina toti dragonii ramasi in heap
- pop = heappop(heap)
- sum += -pop[0]
- dragons += 1
- sol.append(pop[1])
- if dragons >= int(place[1]): # daca ultima printesa considera cavalerul 'neinfricat'
- print(sum) # afisam solutia
- print(dragons)
- for x in sol:
- print(x, end=" ")
- else: # altfel, afisam -1
- print(-1)
Advertisement
Add Comment
Please, Sign In to add comment