Круговой турнир на стадионе
Условие
В школьной лиге по мини-футболу решили провести круговой турнир: каждая команда играет с каждой ровно один раз.
Тренер попросил тебя заранее понять, сколько матчей займёт расписание, если в лиге n команд.
Важно: ответ может не помещаться в 32-битный тип (как на олимпиадах), используйте 64-битные вычисления. В Python это не проблема.
Формат ввода
Одно целое число n — количество команд.
Формат вывода
Выведите одно целое число — сколько матчей будет сыграно.
Ограничения
- 0 ≤ n ≤ 1 000 000 000
Пример
Ввод:
4
Вывод:
6Как решать — идея подхода
Приём: Комбинаторика: число пар (C(n, 2))
Ключевое наблюдение: матч однозначно задаётся парой команд. Если каждая команда играет с каждой ровно один раз, то нужно посчитать количество неупорядоченных пар из n команд.
Почему это работает: выбор «кто с кем сыграет» не зависит от порядка. Пара (А, B) — это тот же матч, что и (B, А). Значит, считаем сочетания по 2.
План решения:
- Прочитай n.
- Представь команды как n элементов.
- Посчитай число способов выбрать 2 разные команды: сначала можно выбрать первую команду n способами, вторую — (n-1) способом.
- Но так мы посчитали каждый матч дважды (А-B и B-А), поэтому делим на 2.
- Выведи результат.
Полезная формула (одной строкой): ans = n * (n - 1) // 2.
Сложность: O(1) по времени и O(1) по памяти — одна арифметика.
Частая ошибка: использовать обычное деление / и получать число с плавающей точкой, или забыть про // (целочисленное деление). Ещё проверь крайние случаи: при n=0 или n=1 ответ должен быть 0.
Разберись руками
В лиге 4 команды. Каждая играет с каждой ровно один раз: матч «2 против 3» — это то же самое, что «3 против 2», и таких повторов быть не должно.
- Представь команды как 1, 2, 3, 4. Ниже записаны ВСЕ возможные «направленные» пары (кто с кем), включая дубли в обратном порядке. Отметь только те варианты, которые должны остаться в расписании, если матч считается один раз (без повтора «наоборот»).
- Теперь просто посчитай: сколько матчей ты оставил(а) в прошлом шаге?
- Почему мы выкидывали половину записей вроде 2–1, 3–1, 4–2…?
Идея: Сначала представь все игры как пары команд. Потом убери повторы, которые отличаются только порядком (игра «A–B» та же, что «B–A»). Оставшиеся уникальные пары и есть число матчей.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- На программиста по олимпиаде: путь по классам — что даёт диплом, куда с ним берут на ИТ-направления и почему решает 9 класс
- Вердикты судьи: WA, TLE, RE, PE, CE — что значит каждый код проверяющей системы и где искать причину