11679. Круглый
стол
Сколькими способами можно
рассадить n различных
людей вокруг круглого стола? Два расположения считаются одинаковыми, если одно
из них можно получить из другого с помощью поворота стола.
Вход. Одно положительное целое число n
(n ≤ 20).
Выход. Выведите количество различных
способов рассадить n разных
людей вокруг круглого стола.
|
Пример
входа |
Пример
выхода |
|
4 |
6 |
комбинаторика
В отличие от рассадки в
ряд, у круглого стола нет фиксированного начала. Поэтому все расстановки,
которые отличаются только циклическим сдвигом, считаются одинаковыми.
Если бы люди
рассаживались в ряд, то количество способов было бы равно n!, так как можно
произвольно переставлять
n различных людей.
Для круглого
стола каждое конкретное размещение можно повернуть n способами,
получив n эквивалентных линейных перестановок.
Например, для
размещения
(1, 2, 3, 4) повороты дают:
(1, 2, 3, 4),
(2, 3, 4, 1), (3, 4, 1, 2), (4, 1, 2, 3)
Все эти расположения считаются одинаковыми.
Следовательно, каждое
уникальное круговое расположение соответствует ровно n линейным перестановкам.
Чтобы получить число
различных рассадок вокруг круглого стола, нужно общее число перестановок
разделить на число эквивалентных поворотов:
= (n – 1)!
Пример
Для 4 людей существует 6 различных
расположений:
·
(1, 2,
3, 4)
·
(1, 2,
4, 3)
·
(1, 3,
2, 4)
·
(1, 3,
4, 2)
·
(1, 4,
2, 3)
·
(1, 4,
3, 2)
Все остальные расположения с
помощью поворота можно свести к одному из перечисленных. Например, расположение
(4, 2, 1, 3) эквивалентно расположению (1, 3, 4, 2).
Реализация алгоритма
Читаем входное значение n.
scanf("%lld", &n);
В переменной res вычисляем ответ.
res = 1;
for (i = 1; i < n; i++)
res = res * i;
Выводим ответ.
printf("%lld\n", res);