# 2020 google hash code competition ver 0
https://hackmd.io/OkCZsFgUQ2SxJgtudCpLYQ
```python=
testcasepool = [
'f_libraries_of_the_world.txt',
'e_so_many_books.txt',
'd_tough_choices.txt',
'c_incunabula.txt',
'b_read_on.txt',
'a_example.txt']
for testcase in testcasepool:
score_dict = dict() # book score
lib = dict()
res = []
with open(testcase, 'r') as f:
first_line = f.readline().strip().split(' ')
# print(first_line)
n_book, n_library, n_day = map(int, first_line)
# print(n_book, n_library, n_day)
second_line = f.readline().strip().split(' ')
for i in range(n_book):
score_dict[i] = int(second_line[i])
# print(score_dict)
for i in range(n_library):
tmp = f.readline().strip().split(' ')
book, day, scan = map(int, tmp)
index = f.readline().strip().split(' ')
index = map(int, index)
index_value = dict()
value_sum = 0
for j in index:
index_value[j] = score_dict[j]
value_sum += score_dict[j]
index_value = sorted(index_value, key=lambda x: index_value[x], reverse=True)
lib_volume = min((n_day - day) * scan, book)
lib[i] = [book, day, scan, index_value, lib_volume]
print(lib)
lib_by_vol = sorted(lib, key=lambda x: lib[x][4], reverse=True)
print(lib_by_vol)
# find how many lib we can use
tmp = 0
max_lib = 0
for i in range(n_library):
tmp += lib[lib_by_vol[i]][2]
# print(tmp)
if tmp >= n_day:
break
max_lib = i + 1
res.append(str(max_lib))
# to decide the order of books we want to scan
for ele in lib_by_vol[0:max_lib]:
# res.append([ele, num_of_book_we_want_to_send])
numofbooks_scanned = min(lib[ele][4], lib[ele][0]) # make sure we will not request more than lib can provide
send_book_index = []
for this_book in range(numofbooks_scanned):
if lib[ele][3][this_book] in score_dict:
send_book_index.append(str(lib[ele][3][this_book])) # lib[ele][3] is booklisk of this lib
del score_dict[lib[ele][3][this_book]]
res.append(str(ele) + ' ' + str(len(send_book_index)))
res.append(" ".join(send_book_index))
with open(testcase + '_result.txt', 'w') as f:
for i in res:
f.writelines(i + '\n')