e-olymp 4142. Большой XOR

Задача

Для заданного целого $x$ найти количество таких $a$, удовлетворяющих условию:

  • $ a $ xor $x > x $
  • $ 0 < a < x $

где $a$ и $x$ — целые, xor — битовый XOR оператор.

Имеются $q$ запросов, каждый из которых содержит целое число $x$. Для каждого запроса выведите общее количество значений $a$, удовлетворяющих условиям выше.

Входные данные

Первая строка содержит число запросов $q$ $(1 \leqslant q \leqslant 10^5)$. Каждая из следующих $q$ строк содержит значение $x$ $(1 \leqslant x \leqslant 10^{10})$.

Выходные данные

Для каждого теста выведите в отдельной строке количество значений $a$, удовлетворяющих приведенным условиям.

Тесты

Входные данные Выходные данные
1 2
2
10
1
5
2 3
13
3
16
2
0
15
3 5
1
7
4294967295
42
451
0
0
0
21
60

Код

Решение

XOR выдаёт число, биты которого равны $1$, когда лишь у одного из чисел соответствующий бит равен $1$. Числа большие чем $x$ получаем лишь тогда, когда $2^{k}\leqslant a<2^{k+1}$, где $k$- номер бита числа $x$, который равен нулю. Таких $a$ существует $2^k$ штук для каждого такого бита.

  • Задача на e-olymp
  • Код программы на ideone
  • Засчитанное решение
  • Related Images:

    5 thoughts on “e-olymp 4142. Большой XOR

    1. В условии задачи в нескольких местах переменные $a$ и $x$ оформлены не как формулы, а как текст.
      В строках 1 и 6 не весь код
      Не хватае пробела после запятой в решении.

      • В условии задачи всё ещё есть ‘a’ и в входных данных ‘q’ оформленные как текст

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

    Добавить комментарий