Разбор
Сначала следует выбрать людей для первого хоровода. Это можно сделать способами. Подсчитаем количество способов, которыми можно поставить людей внутри одного хоровода. Зафиксируем того кто будет первым, после чего остальных людей можно расставить произвольным образом, а именно способами. Количество способов составить два хоровода равно
Деление на необходимо чтобы не различать пары хороводов и . Например, при разделения на хороводы и будем считать одинаковыми.
Упростим указанную формулу и получим ответ:
Пример
Например, при количество способов равно :
первый раунд танца — , второй — ;
первый раунд танца — , второй — ;
первый раунд танца — , второй — .
По формуле для ответ равен
Построим все различимые хороводы для . На первом месте поставим участника . На остальных трех местах можно поставить любую перестановку из трех остальных участников.
Вращая по кругу любую из приведенных расстановок, можно получить неразличимые хороводы. Например, неразличимыми будут (рассмотрим циклические сдвиги последней перестановки):
Имеется хороводов из участников. Однако различимых хороводов для имеется .
Реализация алгоритма
Функция fact вычисляет факториал числа .
long long fact(int n) { long long res = 1; for (int i = 2; i <= n; i++) res *= i; return res; }
Основная часть программы. Читаем входное число .
scanf("%d", &n);
Вычисляем и выводим ответ.
res = 2 * fact(n - 1) / n; printf("%lld\n", res);
Python реализация
Функция fact вычисляет факториал числа .
def fact(n): res = 1 for i in range(2, n + 1): res *= i return res
Основная часть программы. Читаем входное число .
n = int(input())
Вычисляем и выводим ответ.
res = 2 * fact(n - 1) // n print(res)