Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import bisect
- import collections
- nr_books = 0
- nr_libraries = 0
- nr_days = 0
- book_appearances = []
- books_scores = []
- libs = []
- books = {}
- lib_scores = {}
- class Library:
- def __init__(self, bn, st, cs, bID, ID, td):
- self.booksNo = bn
- self.signTime = st
- self.canShip = cs
- self.booksID = bID
- self.ID = ID
- self.total_days = td
- def __repr__(self):
- return "LIBRARY[{}] HAS {} books".format(self.ID, self.booksNo)
- def compute_score(self):
- self.score = 0
- for book in self.booksID:
- self.score += books[str(book)]
- self.score *= self.canShip
- self.score /= self.signTime
- return self.score
- class Book:
- def __init__(self, ID, score):
- self.ID = ID
- self.score = score
- def HaiCuInputu(file):
- global nr_books, nr_libraries, nr_days, libs, books_scores, books
- with open(file) as f:
- inp = f.readline().split()
- nr_books = int(inp[0])
- books_scores = [0 for i in range(nr_books)]
- book_appearances = [0 for i in range(nr_books)]
- nr_libraries = int(inp[1])
- libs = [0 for i in range(nr_libraries)]
- nr_days = int(inp[2])
- inp = f.readline().split()
- for id in range(0, nr_books):
- books.update({str(id):int(inp[id])})
- books_scores[id] = int(inp[id])
- for i in range(0, nr_libraries):
- inp = f.readline().split()
- data = f.readline().split()
- inp2 = []
- for x in data:
- book_appearances[int(x)] += 1
- inp2.append( (int(x),books_scores[int(x)]) )
- inp2.sort(key=lambda r: r[1])
- bks = []
- for q in inp2:
- bks.append(q[0])
- td = int(inp[1]) + int(inp[2])*int(inp[0])
- libs[i] = Library(int(inp[0]), int(inp[1]), int(inp[2]), bks, i, td)
- lib_scores.update({str(i):libs[i].compute_score()})
- for lib in libs:
- print(lib.ID, lib.booksNo, lib.signTime, lib.canShip, lib.booksID)
- if __name__ == "__main__":
- HaiCuInputu('a_example.txt')
- lib_scores = collections.OrderedDict(lib_scores)
- prior_order = []
- for key, value in reversed(list(lib_scores.items())):
- print 'LIBRARY=',key, value
- prior_order.append(key)
- is_scanning = ''
- prio_idx = 0
- timer = 0
- is_scanned = []
- count_libs = 0
- OUT = ''
- folosite = []
- face_sig = []
- print '------------------------------------'
- print 'STARTING'
- print '------------------------------------'
- for i in range(nr_days):
- print '\n>> DAY=',i,'IS SCANNED=',is_scanned,'SCANNING=',is_scanning
- if is_scanning == '':
- if prio_idx >= len(prior_order):
- caca = 1
- else:
- is_scanning = prior_order[prio_idx]
- timer = libs[int(prior_order[prio_idx])].signTime
- if timer != 0:
- timer -= 1
- if is_scanned:
- j = 0
- print 'SENDING BOOKS:'
- while is_scanned:
- if j >= len(is_scanned):
- break
- for k in range(is_scanned[j].canShip):
- print is_scanned[j].booksID[0]
- if is_scanned[j] not in folosite:
- folosite.append(is_scanned[j])
- is_scanned[j].booksID.pop(0)
- if is_scanned[j].booksID == []:
- is_scanned.pop(j)
- break
- j += 1
- if timer == 0 and i != 0:
- if prio_idx >= len(prior_order):
- caca = 1
- else:
- is_scanned.append(libs[int(prior_order[prio_idx])])
- face_sig.append(int(prior_order[prio_idx]))
- is_scanning = ''
- prio_idx += 1
- ############### concateneaza tot aici tot
- OUT += str(len(folosite))
- OUT += '\n'
- for i in face_sig:
- OUT += str(face_sig[i])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement