Уведомления

Группа в Telegram: присоединиться

#1 Янв. 14, 2020 11:21:25

lppp_777
Зарегистрирован: 2020-01-14
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

Прохожу курс Хирьянова и стопанулся на задаче из второго контеста:

Есть результаты работы студентов в семестре. Студентов выводить в порядке суммы их баллов. Требутеся вывести отсортированные результаты работ для каждого студента.

Данные вводятся как: student_id value

student_id принимает значения от 0 до N. value от 1 до 10

Пример входных данных: 0 3 0 5 1 3 1 2

Тут представленны данные о двух студента: 0 и 1. Сумма балов студента 0 - 8. Студента 1 - 5. Значит, сначала должны быть напечатаны результаты 0 студента, затем 1. Таким образом сначала надо вывести отсортированные результаты студента 0, затем студента 1:

5 3 3 2

Напомним, что у list в питоне есть встроенный метод sort и есть функция sorted. У них есть параметр key, который определяет по каким значениям будет сортироваться объект. Например код ниже будет сортировать лист по длинне его элементов. Так же есть параметр reverse.

a = a.sort(key=lambda x: len(x)) a a.sort(key=lambda x: len(x), reverse=True)

Что такое лямбда функция вы узнаете в дальнейшем (так же всегда есть сайт google). Для выполнения этого задания достаточно понять, на что надо заменить функцию len.

Формат входных данных
В первой строке N - количество студентов. Далее идет какое-то количество строк (не равное N) с результатами студентов в формате: student_id value. 0 <= student_id < N. Значения разделены пробелом. Ввод заканчивается #.

Формат выходных данных
Вывести отсортированные результаты студентов в одну строку. Сначала печатаются результаты лучшего по сумме баллов студента, потом второго и так далее. Результаты в одну строку

Примеры
Ввод Вывод
3
0 3
0 10
2 3
2 2
2 4
#
10 3 4 3 2

Помогите plz

Офлайн

#2 Янв. 14, 2020 13:58:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 6659
Репутация: +  595  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

  
>>> def f():
...     n = int(input())
...     d = {}
...     while True:
...         s = input()
...         if s == '#':
...             break
...         a, b = map(int, s.split())
...         if a in d:
...             d[a][0] += b
...             d[a][1].append(b)
...         else:
...             d[a] = [b, [b]]
...     out = sum((sorted(b, reverse=True)
...                for a, b in sorted(d.values(), reverse=True)),
...               [])
...     print(*out)
... 
>>> f()
3
0 3
0 10
2 3
2 2
2 4
#
10 3 4 3 2
>>>



Офлайн

#3 Янв. 14, 2020 14:16:39

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2239
Репутация: +  162  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

 >>> data = (0, 3, 0, 5, 1, 3, 1, 2)
>>> sorted([ sorted(v for k,v in zip(data[0::2], data[1::2]) if k==x) for x in set(data[0::2]) ], key=su
m)
[[2, 3], [3, 5]]
>>> data = (0, 3, 0, 10, 2, 3, 2, 2, 2, 4)
>>> sorted([ sorted(v for k,v in zip(data[0::2], data[1::2]) if k==x) for x in set(data[0::2]) ], key=su
m)
[[2, 3, 4], [3, 10]]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version