Найдите позиции заданных людей через время T, используя их время начала и направление

Опубликовано: 21 Сентября, 2022

Существует кольцевая дорожка длиной N и даны два массива start[] и direct[] размера M и целое число T, где start[ I ] представляет начальную точку i -го человека, а direct[ I ] представляет направление по часовой стрелке. если direct[ I ] равно 1 , против часовой стрелки, если direct[ I ] равно -1 , задача состоит в том, чтобы найти позиции всех людей через T единиц времени.

Note: Every person moves 1 unit distance in 1 unit of time.

Примеры:

Input: N = 5, M = 2, T = 1, start[] = {2, 3}, direct[] = {1, -1}
Output: 3 2
Explanation: Given circle has 5 points from 1 to 5 and there are two men let say A and B. A starts from 2nd point and moves clockwise as direct[0] = 1, so after 1 minutes he will be at point 3. Similarly, B starts from 3rd point moving anticlockwise, so after 1 min he will be at point 2. So, ans array contains [3, 2] after sorting it becomes [2, 3].

Input: N = 4, M = 3, T = 2, start[] = {2, 1, 4}, direct[] = {-1, 1, -1}
Output: 4 3 2

Подход: Идея решения этой проблемы основана на наблюдении за использованием кольцевой дорожки. Найдите точку через T единиц времени и возьмите модуль, чтобы найти ответ. Выполните следующие шаги, чтобы решить проблему:

  • Перебрать диапазон [0, M), используя переменную i , и выполнить следующие задачи:
    • Инициализируйте переменную t_moves как direct[ I ]*T.
    • Инициализируйте переменную end_pos как (((start[i] + t_moves) % N) + N) % N .
    • Если end_pos равен 0 , тогда установите значение start[ I ] как N , иначе установите его как end_pos .
  • После выполнения вышеуказанных действий выведите в качестве ответа значения массива start[] .

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(M)
Вспомогательное пространство: O(1)