이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
import sys
from collections import defaultdict
def distributing_problems(contestant_problem_dict, problem_contestant_map, list_of_problems, prob_solving_time, total_duration):
num_of_solved_prob = 0
penalty_points = 0
problem_solving_dict = defaultdict(list)
for problem in sorted(list_of_problems, reverse=True):
# find contestant who can solve the problem
contestants_can_solve_problem = problem_contestant_map[problem]
if not contestants_can_solve_problem:
break
selected_contestant = contestants_can_solve_problem[0]
# # if there are more than two contestants who can solve the problem, select that contestant
# # who can solve minimum problems
if len(contestants_can_solve_problem) > 1:
selected_dict = dict(
filter(lambda item: item[0] in contestants_can_solve_problem, contestant_problem_dict.items()))
min_val = min([len(selected_dict[ele]) for ele in selected_dict])
for key, val in selected_dict.items():
if len(val) == min_val:
selected_contestant = key
break
if selected_contestant not in problem_solving_dict:
# as this if first problem of contestant, starting time will be 0
start_time = 0
else:
# to calculate total time spent by contestant, we add problem-solving time to
# time of last problem solved
start_time = problem_solving_dict[selected_contestant][-1][1] + prob_solving_time
if (start_time + prob_solving_time) > total_duration:
break
problem_solving_dict[selected_contestant].append((problem, start_time))
penalty_points += start_time + prob_solving_time
num_of_solved_prob += 1
return num_of_solved_prob, penalty_points, problem_solving_dict
if __name__ == '__main__':
contestant_problem_map = {}
problem_contestant_map = {}
num_of_con, num_of_prob, solving_time, duration, num_of_pairs = sys.stdin.readline().split()
problem_list = set()
# create a dictionary as which contestant can solve which problem
for pair in range(int(num_of_pairs)):
contestant, p = sys.stdin.readline().split()
if contestant in contestant_problem_map.keys():
contestant_problem_map[contestant].append(p)
else:
contestant_problem_map.update({
contestant: [p]
})
if p in problem_contestant_map.keys():
problem_contestant_map[p].append(contestant)
else:
problem_contestant_map.update({
p: [contestant]
})
problem_list.add(p)
num_of_problem_solved, penal_points, problems_solved_dict = distributing_problems(
contestant_problem_map,
problem_contestant_map,
list(problem_list),
int(solving_time),
int(duration)
)
print(num_of_problem_solved, penal_points)
lst = []
for pnt, solved_problem in problems_solved_dict.items():
for sol in solved_problem:
print(pnt, sol[0], sol[1])
# for i in sorted(lst, key=lambda x: (x[2], x[0])):
# print(*i)
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |