davidbejenariu2

cod python

Jan 4th, 2021
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.03 KB | None | 0 0
  1. # citim datele de intrare
  2. n = int(input())
  3. places = []
  4.  
  5. for i in range(1, n):
  6.     places.append(tuple(input().split()))
  7.  
  8. from heapq import heappush, heappop
  9.  
  10. # initial, cavalerul se afla pe prima casuta, a omorat 0 dragoni si nu a strans nicio moneda
  11. counter = 1
  12. sum = 0
  13. dragons = 0
  14. heap = []
  15. sol = []
  16.  
  17. # parcurgem fiecare casuta
  18. for place in places:
  19.     counter += 1    # suntem la casuta counter
  20.  
  21.     if place[0] == 'd':    # intalnim un dragon
  22.                            # adaugam in heap perechea formata din -valoarea comorii si pozitia dragonului
  23.         heappush(heap, (-int(place[1]), counter))
  24.     else:    # intalnim o printesa
  25.         if counter < n:    # nu este ultima printesa
  26.                            # deci trebuie sa calculam cati dragoni putem omori pentru a nu ne opri aici
  27.             allowed = int(place[1]) - dragons - 1
  28.  
  29.             # cat timp avem voie sa omoram dragoni, vom alege primele valori din heap
  30.             while allowed > 0:
  31.                 dragons += 1
  32.                 pop = heappop(heap)    # extragem din heap perechea cea mai convenabila
  33.                 sum += -pop[0]    # adaugam la suma monedele castigate
  34.                 allowed -= 1    # am scapat de un dragon, deci decrementam
  35.                 sol.append(pop[1])    # adaugam la solutie pozitia dragonului
  36.  
  37.             for x in heap:    # eliminam din heap restul dragonilor deoarece nu mai avem ce face cu ei
  38.                 heappop(heap)
  39.         else:    # am ajuns la ultima printesa
  40.             for x in heap:    # acum putem elimina toti dragonii ramasi in heap
  41.                 pop = heappop(heap)
  42.                 sum += -pop[0]
  43.                 dragons += 1
  44.                 sol.append(pop[1])
  45.  
  46.             if dragons >= int(place[1]):    # daca ultima printesa considera cavalerul 'neinfricat'
  47.                 print(sum)                  # afisam solutia
  48.                 print(dragons)
  49.  
  50.                 for x in sol:
  51.                     print(x, end=" ")
  52.             else:    # altfel, afisam -1
  53.                 print(-1)
Advertisement
Add Comment
Please, Sign In to add comment