• Предмет: Информатика
  • Автор: recordtop4ik2
  • Вопрос задан 1 год назад

SMS голосування
У фіналі фабрики зірок було проведено SMS голосування для визначення переможців серед N конкурсантів. Телеглядачі відправляли SMS з номером (число від 1 до N) свого улюбленого виконавця і кількість відповідних SMS склали рейтинг кожного учасника. Всього на головний комп’ютер конкурсу надійшло M повідомлень SMS. Потрібно скласти програму, яка виведе номери трьох переможців у порядку спадання їх рейтингів та зростання номерів у випадку, якщо рейтинги рівні.

Вхідні дані

У першому рядку записано два числа N і M (3 ≤ N ≤ 100, 1 ≤ M ≤ 1000000).

У наступному рядку M чисел, кожне з яких не перевищує N.

Вихідні дані

Три числа - номери переможців записані в один рядок, через пропуск.


Ліміт часу 1 секунда

Ліміт використання пам'яті 128 MiB
Вхідні дані #1
5 10
1 2 3 4 5 2 1 2 4 2
Вихідні дані #1
2 1 4

Ответы

Ответ дал: листиккк
1

Ответ:

from collections import Counter

n, m = map(int, input().split())

votes = list(map(int, input().split()))

# підрахунок кількості голосів для кожного конкурсанта

vote_count = Counter(votes)

# сортування за зменшенням кількості голосів, а потім за збільшенням номера

winners = sorted(vote_count.items(), key=lambda x: (-x[1], x[0]))

# виведення перших 3 переможців

for i in range(3):

   print(winners[i][0], end=" ")

Объяснение:

У цьому розв'язку використовується функція `Counter()` модулю `collections`, яка дозволяє зручно підрахувати кількість голосів для кожного учасника. Потім результат сортується за зменшенням кількості голосів, а в разі рівності - за збільшенням номеру конкурсанта. На кінці просто виводяться перші три переможці.


Артур998: https://znanija.com/task/52309283 как исправить эту ошибку? 100 баллов
Вас заинтересует