Бесплатный урок с нашим репетитором!

Узнать подробнее

Новая Школа - онлайн-школа подготовки к ЕГЭ
При поддержке
Посмотреть все вопросы нейросети
Бесплатный пробный урок с репетитором

Узнай больше про репетиторов Новой Школы и запишись на бесплатный пробный урок. Мы проверим твой уровень знаний и составим план обучения по любому предмету и классу

Вопрос от Анонимного юзера 03 октября 2025 19:54

На питоне как решить задачу В первой строке содержится одно натуральное число N ( 2 ≤ N ≤ 10 5 ) — число номеров вопросов в списке. Вторая строка содержит N натуральных чисел — перестановку номеров вопросов из старого списка.

Ответ нейросети

03 октября 2025 19:54

Классическая задача с перестановкой такая: дан размер массива N и сама перестановка p из чисел 1..N. В зависимости от формулировки часто требуется:

  • найти обратную перестановку (для каждого номера старого списка узнать его позицию в новом списке);
  • или получить новый порядок элементов исходного списка A: новый порядок = [A[p[i]-1] для i=1..N];
  • или просто вывести саму перестановку (если она уже задаёт новый порядок старых номеров).

Ниже даю подробное решение на Python для двух самых частых вариантов. Выберите тот, который подходит под вашу задачу (или пришлите полное условие — адаптирую под него).

Общая подготовка

  • Ввод: первая строка содержит N, вторая строка — N чисел, образующие перестановку p.
  • Временная сложность: O(N), память O(N).

Вариант 1. Найти обратную перестановку (позиция каждого старого номера в новом списке) Задача: для каждого i от 1 до N найти позицию i в перестановке p. Результат — массив pos, где pos[i-1] = позиция числа i в p (1-based).

Пример: N=5, p=[3,1,4,5,2] → позиции: [2,5,1,3,4]

Код:

import sys

def solve():
    data = sys.stdin.buffer.read().strip().split()
    if not data:
        return
    it = iter(data)
    n = int(next(it))
    p = [int(next(it)) for _ in range(n)]

    # pos[x-1] = позиция числа x в перестановке p (1-based)
    pos = [0] * n
    for i, val in enumerate(p, start=1):
        pos[val - 1] = i

    print(' '.join(map(str, pos)))

if __name__ == "__main__":
    solve()

Как работает:

  • проход по перестановке и запоминаем, на какой позиции встречается каждое число.
  • выведем итоговую последовательность из N чисел.

Вариант 2. Получить новый порядок элементов исходного списка A (если дан A) Если у вас есть какой-то массив A из N элементов (например, номера вопросов старого списка), и permutation p задаёт новый порядок старых номеров, то новый список B можно получить так: B[i] = A[p[i]-1] для i = 1..N

Код-подсказка (нужен только A и p):

def apply_permutation(A, p):
    # p — перестановка чисел 1..N
    return [A[idx - 1] for idx in p]

Пример использования:

  • A = ["Q1","Q2","Q3","Q4","Q5"]
  • p = [3,1,4,5,2]
  • B = ["Q3","Q1","Q4","Q5","Q2"]

Вариант 3. Просто проверить, является ли данная последовательность перестановкой 1..N Если нужно проверить корректность входной перестановки (сомнительно ли она содержит все числа 1..N без повторов), можно добавить простую проверку:

def is_permutation_of_1_to_n(p, n):
    return sorted(p) == list(range(1, n+1))

Пример с полным входом

  • Ввод: 5 3 1 4 5 2
  • Вариант 1 (обратная перестановка): выводит 2 5 1 3 4

Если хотите, можно адаптировать код под точное задание. Пожалуйста, пришлите полный текст условия задачи (или скажите, какой именно результат вам нужно получить: обратная перестановка, reorder по A и т.д.), и я дам точное решение под ваш случай.

Задай свой вопрос

Напиши любую задачу или вопрос, а нейросеть её решит

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

Бесплатно Мобильное приложение ГДЗ
Мобильное приложение ГДЗ

Задавай вопросы искуcственному интеллекту текстом или фотографиями в приложении на iPhone или Android

qr-codegoogle-playapp-store

Саша — ассистент в телеграмме

на питоне как решить задачу В первой строке содержится одно натуральное число N ( 2 ≤ N ≤ 10 5 ) — число номеров вопросов в списке. Вторая строка содержит N натуральных чисел — перестановку номеров вопросов из старого списка.
Классическая задача с перестановкой такая: дан размер массива N и сама перестановка p из чисел 1..N. В зависимости от формулировки часто требуется: - найти обратную перестановку (для каждого номера старого списка узнать его позицию в новом списке); - или получить новый порядок элементов исходного списка A: новый порядок = [A[p[i]-1] для i=1..N]; - или просто вывести саму перестановку (если она уже задаёт новый порядок старых номеров). Ниже даю подробное решение на Python для двух самых частых вариантов. Выберите тот, который подходит под вашу задачу (или пришлите полное условие — адаптирую под него). Общая подготовка - Ввод: первая строка содержит N, вторая строка — N чисел, образующие перестановку p. - Временная сложность: O(N), память O(N). Вариант 1. Найти обратную перестановку (позиция каждого старого номера в новом списке) Задача: для каждого i от 1 до N найти позицию i в перестановке p. Результат — массив pos, где pos[i-1] = позиция числа i в p (1-based). Пример: N=5, p=[3,1,4,5,2] → позиции: [2,5,1,3,4] Код: ```python import sys def solve(): data = sys.stdin.buffer.read().strip().split() if not data: return it = iter(data) n = int(next(it)) p = [int(next(it)) for _ in range(n)] # pos[x-1] = позиция числа x в перестановке p (1-based) pos = [0] * n for i, val in enumerate(p, start=1): pos[val - 1] = i print(' '.join(map(str, pos))) if __name__ == "__main__": solve() ``` Как работает: - проход по перестановке и запоминаем, на какой позиции встречается каждое число. - выведем итоговую последовательность из N чисел. Вариант 2. Получить новый порядок элементов исходного списка A (если дан A) Если у вас есть какой-то массив A из N элементов (например, номера вопросов старого списка), и permutation p задаёт новый порядок старых номеров, то новый список B можно получить так: B[i] = A[p[i]-1] для i = 1..N Код-подсказка (нужен только A и p): ```python def apply_permutation(A, p): # p — перестановка чисел 1..N return [A[idx - 1] for idx in p] ``` Пример использования: - A = ["Q1","Q2","Q3","Q4","Q5"] - p = [3,1,4,5,2] - B = ["Q3","Q1","Q4","Q5","Q2"] Вариант 3. Просто проверить, является ли данная последовательность перестановкой 1..N Если нужно проверить корректность входной перестановки (сомнительно ли она содержит все числа 1..N без повторов), можно добавить простую проверку: ```python def is_permutation_of_1_to_n(p, n): return sorted(p) == list(range(1, n+1)) ``` Пример с полным входом - Ввод: 5 3 1 4 5 2 - Вариант 1 (обратная перестановка): выводит 2 5 1 3 4 Если хотите, можно адаптировать код под точное задание. Пожалуйста, пришлите полный текст условия задачи (или скажите, какой именно результат вам нужно получить: обратная перестановка, reorder по A и т.д.), и я дам точное решение под ваш случай.