Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- with open("input.txt","r") as f:
- inp=f.readlines()
- x=inp[0]
- x=x.replace("\n","")
- x=x.split()
- BooksNrGlobal=int(x[0])
- LibNrGlobal=int(x[1])
- TotalDaysGlobal=int(x[2])
- inp.remove(inp[0])
- class Library:
- SignUp=0
- NumberBooks=0
- BooksPerDay=0
- Index=0
- AverageValue=0
- ListOfBooks=[]
- def __init__(self, libbooks,libsignup,booksperday,numberoflibbooks,ind):
- self.SignUp=libsignup
- self.BooksPerDay=booksperday
- self.NumberBooks=numberoflibbooks
- self.ListOfBooks=libbooks
- self.Index=ind
- x=inp[0]
- x=x.replace("\n","")
- x=x.split()
- BooksGlobal=[]
- for i in range(len(x)):
- BooksGlobal.append((i,int(x[i])))
- inp.remove(inp[0])
- FreqGlobalBooks=[1]*(1+BooksNrGlobal)
- Libraries=[]
- for i in range(0,len(inp)-1,2):
- x=inp[i]
- x=x.replace("\n","")
- x=x.split()
- libbooksnr=int(x[0])
- libsignup=int(x[1])
- booksperday=int(x[2])
- x=inp[i+1]
- x=x.replace("\n","")
- x=x.split()
- libbooks=[]
- for j in range(libbooksnr):
- if BooksGlobal[int(x[j])] not in libbooks:
- libbooks.append(BooksGlobal[int(x[j])])
- libbooks=sorted(libbooks,key=lambda el:el[1])
- Libraries.append(Library(libbooks,libsignup,booksperday,libbooksnr,i//2))
- Solution = []
- cnt=0
- usedDays=0
- while usedDays<TotalDaysGlobal and cnt<LibNrGlobal:
- maxi=-1
- elem=0
- nrelem=0
- for x in Libraries:
- i=0
- x.AverageValue=0
- n=x.NumberBooks
- while( i<n ):
- if FreqGlobalBooks[x.ListOfBooks[i][0]]==0:
- x.ListOfBooks.pop(i)
- n-=1
- i+=1
- if(x.SignUp+n//x.BooksPerDay>TotalDaysGlobal-usedDays-1):
- n=((TotalDaysGlobal-usedDays-1)-x.SignUp)*x.BooksPerDay
- for j in range(n):
- x.AverageValue += x.ListOfBooks[j][1]
- x.AverageValue/=(x.SignUp+(n/x.BooksPerDay))
- if(x.AverageValue>maxi):
- maxi=x.AverageValue
- elem=x
- nrelem=n
- cnt+=1
- usedDays+=elem.SignUp
- lst=[]
- for j in range(nrelem):
- FreqGlobalBooks[elem.ListOfBooks[j][0]]=0
- lst.append(elem.ListOfBooks[j][0])
- Solution.append((elem.Index,n,lst))
- Libraries.remove(elem)
- with open("output.txt","w") as cout:
- cout.write(str(len(Solution))+'\n')
- for x in Solution:
- cout.write(str(x[0])+' '+str(x[1])+'\n')
- for y in x[2]:
- cout.write(str(y)+' ')
- cout.write('\n')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement