Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.09 KB | None | 0 0
  1. import bisect
  2. import collections
  3.  
  4. nr_books = 0
  5. nr_libraries = 0
  6. nr_days = 0
  7. book_appearances = []
  8. books_scores = []
  9. libs = []
  10. books = {}
  11. lib_scores = {}
  12.  
  13.  
  14. class Library:
  15.  
  16.     def __init__(self, bn, st, cs, bID, ID, td):
  17.         self.booksNo = bn
  18.         self.signTime = st
  19.         self.canShip = cs
  20.         self.booksID = bID
  21.         self.ID = ID
  22.         self.total_days = td
  23.  
  24.     def __repr__(self):
  25.         return "LIBRARY[{}] HAS {} books".format(self.ID, self.booksNo)
  26.    
  27.     def compute_score(self):
  28.         self.score = 0
  29.  
  30.         for book in self.booksID:
  31.             self.score += books[str(book)]
  32.  
  33.         self.score *= self.canShip
  34.         self.score /= self.signTime
  35.  
  36.         return self.score
  37.  
  38. class Book:
  39.  
  40.     def __init__(self, ID, score):
  41.         self.ID = ID
  42.         self.score = score
  43.  
  44. def HaiCuInputu(file):
  45.     global nr_books, nr_libraries, nr_days, libs, books_scores, books
  46.  
  47.     with open(file) as f:
  48.         inp = f.readline().split()
  49.         nr_books = int(inp[0])
  50.         books_scores = [0 for i in range(nr_books)]
  51.         book_appearances = [0 for i in range(nr_books)]
  52.         nr_libraries = int(inp[1])
  53.         libs = [0 for i in range(nr_libraries)]
  54.         nr_days = int(inp[2])
  55.  
  56.         inp = f.readline().split()
  57.  
  58.         for id in range(0, nr_books):
  59.             books.update({str(id):int(inp[id])})
  60.             books_scores[id] = int(inp[id])
  61.  
  62.         for i in range(0, nr_libraries):
  63.             inp = f.readline().split()
  64.             data = f.readline().split()
  65.             inp2 = []
  66.             for x in data:
  67.                 book_appearances[int(x)] += 1
  68.                 inp2.append( (int(x),books_scores[int(x)]) )
  69.             inp2.sort(key=lambda r: r[1])
  70.             bks = []
  71.             for q in inp2:
  72.                 bks.append(q[0])
  73.             td = int(inp[1]) + int(inp[2])*int(inp[0])
  74.             libs[i] = Library(int(inp[0]), int(inp[1]), int(inp[2]), bks, i, td)
  75.             lib_scores.update({str(i):libs[i].compute_score()})
  76.  
  77.         for lib in libs:
  78.             print(lib.ID, lib.booksNo, lib.signTime, lib.canShip, lib.booksID)
  79.  
  80.  
  81. if __name__ == "__main__":
  82.  
  83.     HaiCuInputu('a_example.txt')
  84.  
  85.     lib_scores = collections.OrderedDict(lib_scores)
  86.  
  87.     prior_order = []
  88.     for key, value in reversed(list(lib_scores.items())):
  89.         print 'LIBRARY=',key, value
  90.         prior_order.append(key)
  91.  
  92.  
  93.     is_scanning = ''
  94.     prio_idx = 0
  95.     timer = 0
  96.     is_scanned = []
  97.  
  98.     count_libs = 0
  99.  
  100.     OUT = ''
  101.     folosite = []
  102.     face_sig = []
  103.  
  104.     print '------------------------------------'
  105.     print 'STARTING'
  106.     print '------------------------------------'
  107.     for i in range(nr_days):
  108.         print '\n>> DAY=',i,'IS SCANNED=',is_scanned,'SCANNING=',is_scanning
  109.         if is_scanning == '':
  110.             if prio_idx >= len(prior_order):
  111.                 caca = 1
  112.             else:
  113.                 is_scanning = prior_order[prio_idx]
  114.                 timer = libs[int(prior_order[prio_idx])].signTime
  115.         if timer != 0:
  116.             timer -= 1
  117.         if is_scanned:
  118.             j = 0
  119.             print 'SENDING BOOKS:'
  120.             while is_scanned:
  121.                 if j >= len(is_scanned):
  122.                     break
  123.                 for k in range(is_scanned[j].canShip):
  124.                     print is_scanned[j].booksID[0]
  125.                     if is_scanned[j] not in folosite:
  126.                         folosite.append(is_scanned[j])
  127.                     is_scanned[j].booksID.pop(0)
  128.                     if is_scanned[j].booksID == []:
  129.                         is_scanned.pop(j)
  130.                         break
  131.                 j += 1
  132.         if timer == 0 and i != 0:
  133.             if prio_idx >= len(prior_order):
  134.                 caca = 1
  135.             else:
  136.                 is_scanned.append(libs[int(prior_order[prio_idx])])
  137.                 face_sig.append(int(prior_order[prio_idx]))
  138.                 is_scanning = ''
  139.                 prio_idx += 1
  140.  
  141.     ############### concateneaza tot aici tot
  142.     OUT += str(len(folosite))
  143.     OUT += '\n'
  144.     for i in face_sig:
  145.         OUT += str(face_sig[i])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement