Количество операций, чтобы сделать числа равными путем сложения степени 2

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

Даны три положительных целых числа X , Y , и Z и целое число N , задача состоит в том, чтобы сделать их равными, добавив 2 i-1 для i операции к любому из этих 3 чисел. Найдите количество ходов, необходимых для того, чтобы сделать эти 3 числа равными, где общее количество выполненных операций равно N . Если их нельзя сделать равными, выведите -1.

Примеры:

Input: X = 1, Y = 6, Z = 7, N = 30
Output: 3
Explanation: Here in first operation we add 21-1 = 20 = 1 to Y so that it become equal to Z and in second move we add  22-1 = 2 to X and value of X become 3 and then in third move we add 23-1=4 to X such that its value become 7. Hence these three numbers are equal in 3 moves.

Input: X = 4, Y = 5, Z = 4, N = 20
Output: -1

Подход: Задача может быть решена на основе следующего наблюдения:

Наблюдения:

  • Here 2i-1 has one set bit i.e. 01,10,100,1000 and so on . 
  • We have to convert these 3 numbers X, Y, and Z into binary numbers and make their least significant bit equal by adding 2i-1 to any one of these three numbers and doing same thing to each bit of the number until the most significant bit becomes equal also count the number of moves simultaneously.
  • After performing operation if all bits of these three numbers get equal then print the number of moves else print -1. 

Следуйте шагам, указанным ниже, чтобы реализовать идею:

  • Начните итерацию от i = 0 до N-1 :
    • Проверьте, делает ли добавление 2 i к любому числу i-й младший бит одинаковым для всех них.
    • Если нет, то верните -1 .
    • В противном случае продолжайте процесс, пока все числа не станут одинаковыми или пока не будет выполнено N шагов.
  • Если все число становится равным, верните требуемые шаги.

Ниже приведена реализация описанного выше подхода.

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

РЕКОМЕНДУЕМЫЕ СТАТЬИ