Розглянемо перестановку цілих чисел 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].