Розглянемо перестановку цілих чисел 1
, ... n
, таких як ця для n = 6
:
[5,2,4,3,6,1]
Якщо ви розглядаєте перестановку як відображення від [1,2,3,4,5,6]
до [5,2,4,3,6,1]
, перестановку можна розкласти на непересічні цикли . Цикл - це підмножина елементів, які зіставляються один з одним. Наприклад, 1
отримує картографування 5
, яке отримує відображення 6
, яке повертається до нього 1
. Отже один цикл є [1,5,6]
. Інші цикли - це [2]
і [3,4]
. Таким чином, кількість циклів для цієї перестановки становить 3
.
Взагалі, цикли перестановки є унікальними (на замовлення), а кількість циклів перестановки розмірів n
змінюється від 1
- n
.
Змагання
Враховуючи не порожню перестановку, виведіть її кількість циклів.
Вхідний масив , утворений n
цілих чисел 1
, 2
, ..., n
, де n > 0
. Кожне ціле число відбувається рівно один раз. Порядок, в якому вони з'являються, визначає перестановку, як у наведеному вище прикладі.
Замість масиву можна використовувати список, рядок з роздільником між номерами, окремий ввід для кожного номера або все, що є розумним.
Для перестановки розміру n
замість 1 -го набору цілих чисел 1
, ..., n
ви можете послідовно використовувати набір на основі 0 0
, ..., n-1
. Якщо так, то просимо вказати це у своїй відповіді.
Код повинен працювати n
до 20
розумного часу, скажімо, менше однієї хвилини.
Код гольфу. Всі вбудовані дозволені.
Тестові справи
Це передбачає введення масиву на основі 1.
[1] -> 1
[3,2,1] -> 2
[2,3,4,5,1] -> 1
[5,2,4,3,6,1] -> 3
[8,6,4,5,2,1,7,3] -> 2
[4,5,11,12,7,1,3,9,10,6,8,2] -> 1
[4,2,5,11,12,7,1,3,9,10,6,8] -> 5
[5,8,6,18,16,9,14,10,11,12,4,20,15,19,2,17,1,13,7,3] -> 3
[14,5,17,15,10,18,1,3,4,13,11,16,2,12,9,7,20,6,19,8] -> 7
Пов'язані
Цей пов'язаний виклик задає фактичні цикли перестановки, а не їх кількість. Потрібна лише кількість циклів може призвести до скорочення алгоритмів, які убік створюють фактичні цикли.
1
, ..., n
у такому порядку. Чи можете ви уточнити, як відображення може бути вхідним? Це структура даних?
dict
. Я хочу мати {1: 2, 2: 1}
замість цього вхід [2, 1]
.