Submission #754648

# Submission time Handle Problem Language Result Execution time Memory
754648 2023-06-08T08:09:50 Z komalrajputtrootech Programming Contest (POI11_pro) Python 3
0 / 100
759 ms 9872 KB
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 list_of_problems:
        # 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))
        contestant_problem_dict[selected_contestant].remove(problem)
        if not contestant_problem_dict[selected_contestant]:
            del contestant_problem_dict[selected_contestant]
        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 = map(int, 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() and contestant not in problem_contestant_map[p]:
            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])
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 3372 KB It was possible to solve 100 problems and you solved only 39.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 3360 KB It was possible to solve 95 problems and you solved only 26.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 3372 KB It was possible to solve 80 problems and you solved only 4.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 69 ms 3776 KB It was possible to solve 200 problems and you solved only 39.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 340 ms 7156 KB It was possible to solve 494 problems and you solved only 2.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 247 ms 7368 KB It was possible to solve 500 problems and you solved only 8.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 524 ms 9872 KB It was possible to solve 500 problems and you solved only 3.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 59 ms 4268 KB It was possible to solve 390 problems and you solved only 7.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 759 ms 7716 KB It was possible to get penalty of 500 points and you received 19273.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 112 ms 4744 KB It was possible to solve 452 problems and you solved only 34.
2 Halted 0 ms 0 KB -