Круговой турнир на стадионе

тема: Комбинаторика и множества · уровень: базовый

Условие

В школьной лиге по мини-футболу решили провести круговой турнир: каждая команда играет с каждой ровно один раз.

Тренер попросил тебя заранее понять, сколько матчей займёт расписание, если в лиге n команд.

Важно: ответ может не помещаться в 32-битный тип (как на олимпиадах), используйте 64-битные вычисления. В Python это не проблема.

Формат ввода

Одно целое число n — количество команд.

Формат вывода

Выведите одно целое число — сколько матчей будет сыграно.

Ограничения

Пример

Ввод:

4

Вывод:

6

Как решать — идея подхода

Приём: Комбинаторика: число пар (C(n, 2))

Ключевое наблюдение: матч однозначно задаётся парой команд. Если каждая команда играет с каждой ровно один раз, то нужно посчитать количество неупорядоченных пар из n команд.

Почему это работает: выбор «кто с кем сыграет» не зависит от порядка. Пара (А, B) — это тот же матч, что и (B, А). Значит, считаем сочетания по 2.

План решения:

Полезная формула (одной строкой): ans = n * (n - 1) // 2.

Сложность: O(1) по времени и O(1) по памяти — одна арифметика.

Частая ошибка: использовать обычное деление / и получать число с плавающей точкой, или забыть про // (целочисленное деление). Ещё проверь крайние случаи: при n=0 или n=1 ответ должен быть 0.

Разберись руками

В лиге 4 команды. Каждая играет с каждой ровно один раз: матч «2 против 3» — это то же самое, что «3 против 2», и таких повторов быть не должно.

Идея: Сначала представь все игры как пары команд. Потом убери повторы, которые отличаются только порядком (игра «A–B» та же, что «B–A»). Оставшиеся уникальные пары и есть число матчей.

Решить задачу с автопроверкой на Python →

Куда дальше