Задача Е. Алиса и команда
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти:
Казахстан, 12 марта, 2023
Великий Алижан как староста курса просит красавиц Алису и Даяну создать лучшую команду
курса для хакатона. По правилам хакатона нужно создать команду ровно из 4 людей и для каж-
дого определить одну роль. Невозможно участвовать в разработке проекта без: фронтенд, бэкенд,
мобильного разработчика и дизайнера. Всего с курса отозвались и людей, -й из которых имеет уро-
вень front,,backi, mobile,, design, в соответствующей сфере. Сила команды определяется как сумма
уровней всех участководы в выбранных для них ролях. Так как красавица Алиса упорно
решает задачи с Leetcode, а красавица Даяна помогает студентам они просят вас разобраться с
задачей.
6
17 7 10 1
15 18 4 9
6 21 23 13
13 8 2 17
19 12 21 12
6 19 20 20
стандартный ввод
стандартный вывод
2 секунды
256 мегабайт
Формат входных данных
Входные данные состоят числа студентов и (4 5 и 10²). Далее идут в строк состоящие из
front,, backi, mobile,, design, для i-го студента. (0 < front,, backi, mobile,, design, < 10").
Формат выходных данных
Посчитайте силу лучшей команды курса.
Пример
стандартный ввод
80
стандартный выпол
Замечание
В первом примере: на фронтенд нужно взять 5го
мобильную разработку зго дизайнером 6го человека.
fronts+backz + mobiles + designs - 19 + 18 + 23 + 20 - 80.
"
человока Ha бженд 2го, на
Сила такой команды будет
Answers & Comments
n = int(input())
levels = [[0, 0] for _ in range(4)] # список для каждой роли, [сумма уровней, номер студента]
for i in range(n):
skills = list(map(int, input().split()))
for j in range(4):
levels[j][0] += skills[j]
if skills[j] > levels[j][1]:
levels[j][1] = skills[j]
levels.sort(reverse=True) # сортируем по убыванию суммы уровней
team_levels = sum(l[1] for l in levels[:4]) # выбираем первые 4 элемента и складываем их уровни
print(team_levels)
В этом примере команда должна состоять из студентов с навыками: backi у 3-го студента, mobile у 4-го студента, design у 6-го студента и front у 5-го студента. Их суммарные уровни равны 23 + 17 + 20 + 27 = 87.
n = int(input())
students = []
for i in range(n):
front, back, mobile, design = map(int, input().split())
students.append((front, back, mobile, design))
students.sort(key=lambda x: max(x), reverse=True)
best_team = []
for skill_type in range(4):
best_student = students[0]
for student in students:
if student[skill_type] > best_student[skill_type]:
best_student = student
best_team.append(best_student[skill_type])
print(sum(best_team))
У меня закончились идеи как сделать это без 4-х форов, так что вот этот код наверняка привысит лимит по времени, но может быть хоть сколько то баллов наберёт:
n = int(input())
students = []
for i in range(n):
student = tuple(map(int, input().split()))
students.append(student)
max_strength = 0
for f in range(n):
for b in range(n):
for m in range(n):
for d in range(n):
if len(set((f, b, m, d))) == 4: # Убеждаемся, что участники не совпадают
strength = students[f][0] + students[b][1] + students[m][2] + students[d][3]
max_strength = max(max_strength, strength)
print(max_strength)
Самое близкое к правде, что я придумал это код без 4-х проходов, но он выдаёт 83, а не 80 на твоём примере.