Задать вопрос
@Maksym122

Как оптимизировать код на Python во времени?

Вот условия задачи:
За розміщенням знайдіть його номер у лексикографічному порядку.
Вхідні дані:
У першому рядку вхідного файлу знаходяться числа і (1 ≤ ≤
≤ 20). У другому рядку записано попарно різних чисел з діапазону від
1 до - розміщення.
Вихідні дані:
У вихідний файл виведіть єдине число - номер заданого розміщення.
Приклад вхідних даних:
3 2
3 1
Приклад вхідних даних:
5
Пояснення. Розміщенням з елементів по – це впорядкована
вибірка елементів без повторень з множини {1,2,3, … , − 1, }. У
прикладу, наведеного вище, розглядаються вибірки довжиною 2 з 3-х
елементів:
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
Розміщення (3, 1) у списку всіх розміщень записано під номером 5
(нумерація розміщень починається із 1)
Непонятные слова можете перевести
Вот мой код:
from itertools import permutations

def find_permutation_number(N, K, permutation):
    all_permutations = permutations(range(1, N + 1), K)
    all_permutations = list(all_permutations)
    permutation_index = all_permutations.index(permutation) + 1
    return permutation_index

N, K = map(int, input().split())
permutation = tuple(map(int, input().split()))

result = find_permutation_number(N, K, permutation)
print(result)
  • Вопрос задан
  • 205 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Тебе незачем генерировать все возможные перестановки, чтобы найти нужную.
Прочитай внимательно приведённый пример: на каждое изменение первой цифры приходится 3 цифры всего - 1 задействованная = 2 изменения второй цифры. Поэтому, чтобы добраться до первой цифры, равной 3, нужно будет пропустить минимум 4 перестановки: две для смены 1 на 2 и две для смены 2 на 3, так как каждое изменение второй цифры означает одну перестановку. А значит, искомый номер будет не менее 5. Если бы цифр было больше, то каждое изменение второй цифры означало бы более 1 перестановки.
Аналогичные рассуждения выполняешь для последующих цифр, с поправкой на то, что у тебя будет больше задействованных цифр. Таким образом, наращиваешь искомый номер, пока не достигнешь заданной перестановки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы