-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhashcode.py
94 lines (74 loc) · 2.09 KB
/
hashcode.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from math import ceil
from copy import deepcopy
from dataclasses import dataclass
@dataclass
class Library:
books: set
signup_time: int
books_per_day: int
@staticmethod
def read():
(_, signup_time, books_per_day) = input().split()
books = {int(n) for n in input().split()}
return Library(
books=books,
signup_time=int(signup_time),
books_per_day=int(books_per_day)
)
(n_different_books, libraries_card, days) = [int(n) for n in input().split()]
score_of = [int(n) for n in input().split()]
libraries = [Library.read() for _ in range(libraries_card)]
result = dict()
n_libraries = len(libraries)
# intersect = set(libraries[0].books).intersection(set(libraries[1].books))
while days > 0 and len(libraries) > 0:
# TODO delete each library with signup time > days
'''
toDelete = []
for i in range(len(libraries)):
if libraries[i].signup_time > days:
toDelete.append(i)
for elem in toDelete[::-1]:
del toDelete[elem]
'''
min_sig = float("inf")
index = -1
for i in range(n_libraries):
if i in result:
continue
if libraries[i].signup_time < min_sig:
if len(libraries[i].books) <= 0:
continue
min_sig = libraries[i].signup_time
index = i
if index == -1:
break
scanned = deepcopy(libraries[index].books)
result[index] = scanned
days -= min_sig
worked = ceil(len(libraries[index].books) / libraries[index].books_per_day)
# del libraries[index]
days -= worked
# -- update
for elem in libraries:
elem.books.difference_update(scanned)
elem.signup_time -= worked
'''
toRemove = []
for i in result.keys():
if len(result[i]) == 0:
toRemove.append(i)
for index in toRemove:
del result[index]
'''
print(len(result.keys()))
for i in result.keys():
'''
if len(result[i]) == 0:
continue
'''
print(i, len(result[i]))
# print(result[i])
for elem in result[i]:
print(elem, end=' ')
print("")