Кто на k‑м месте в таблице очков
Условие
На школьном турнире по баскетболу тренер выписал очки всех игроков в одну строку. Потом он строит таблицу: очки сортируются по убыванию (больше — выше место). Тренеру нужно быстро узнать, сколько очков стоит на k‑м месте в такой таблице.
Важно: если у нескольких игроков одинаковые очки, они всё равно занимают подряд несколько мест, и на этих местах в таблице стоит одно и то же число очков.
Формат ввода
В первой строке два целых числа n и k — количество игроков и номер места в таблице. Во второй строке n целых чисел a1, a2, ..., an — очки игроков.
Формат вывода
Выведите одно целое число — количество очков на k‑м месте после сортировки очков по убыванию.
Ограничения
2 ≤ n ≤ 350001 ≤ k ≤ n-10^9 ≤ ai ≤ 10^9
Пример
Ввод:
5 2
10 50 20 50 5
Вывод:
50Как решать — идея подхода
Приём: Сортировка по убыванию
Ключевое наблюдение: «k‑е место» в таблице — это просто k‑й элемент в массиве после сортировки по убыванию. Никакой отдельной обработки одинаковых значений не нужно: если несколько игроков набрали одинаково, то после сортировки эти числа всё равно стоят рядом и занимают подряд несколько мест, значит на всех этих местах будет одно и то же значение.
Приём: обычная сортировка массива. Она здесь подходит, потому что n до 35000 — можно спокойно отсортировать все значения и напрямую обратиться к нужному.
План решения:
- Считай n и k.
- Считай массив из n очков.
- Отсортируй массив по убыванию (в Python:
a.sort(reverse=True)). - Ответ — элемент на позиции k (если считать с 1), то есть
a[k-1]при индексации с нуля. - Выведи это число.
Сложность: сортировка работает за O(n log n) по времени и O(1)–O(n) по памяти (зависит от реализации, в Python сортировка на месте).
Частая ошибка: перепутать индексацию. В условии k начинается с 1, а в списке Python индексы с 0, поэтому нужен именно k-1.
Разберись руками
Есть 5 игроков и их очки: 10, 50, 20, 50, 5. Тренер строит таблицу мест: сортирует очки по убыванию (самые большие — в начале). Нужно узнать, какие очки окажутся на 2-м месте.
- Чтобы узнать очки на 2-м месте, что надо сделать с числами очков сначала?
- Отсортируй очки 10 50 20 50 5 по убыванию. Как будет выглядеть список после сортировки?
- Теперь возьми 2-е место в отсортированном списке 50 50 20 10 5. Какие там очки?
Идея: Сначала упорядочи очки по убыванию, чтобы получить «таблицу мест». Потом просто посмотри, какое число стоит на нужном месте k в этом упорядоченном списке.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- БВИ и льготы при поступлении — какой диплом что даёт и сколько лет он действует
- Перечневые олимпиады по информатике — олимпиады перечня Минобрнауки, их уровни и что нужно к диплому