Codeforces Round 901 (Div. 1) |
---|
Закончено |
Медузе даны целые неотрицательные числа $$$a$$$, $$$b$$$, $$$c$$$, $$$d$$$ и $$$m$$$. Первоначально $$$(x,y)=(a,b)$$$. Медуза хочет выполнить несколько операций так, чтобы получилось $$$(x,y)=(c,d)$$$.
Одна операция заключается в выполенении одного из следующих действий:
Здесь $$$\&$$$ обозначает побитовую операцию И, $$$|$$$ обозначает побитовую операцию ИЛИ, $$$\oplus$$$ обозначает побитовое исключающее ИЛИ.
Медуза хочет узнать минимальное количество операций, после которого можно получить $$$(x,y)=(c,d)$$$.
Каждый тест содержит несколько наборов входных данных. В первой строке указывается количество наборов входных данных $$$t$$$ ($$$1 \leq t \leq 10^5$$$). Далее следует описание наборов входных данных.
Единственная строка каждого набора входных данных содержит пять целых чисел $$$a$$$, $$$b$$$, $$$c$$$, $$$d$$$ и $$$m$$$ ($$$0 \leq a, b, c, d, m < 2^{30}$$$).
Для каждого набора входных данных выведите одно целое число — минимальное количество операций. Если требуемые значения не достижимы, то вместо этого выведите $$$-1$$$.
101 0 1 1 13 3 1 2 11 6 0 7 12 4 4 9 821 4 0 17 2850 50 0 0 3995 33 1 33 110138 202 174 64 10878 340 68 340 461457 291 491 566 766
1 -1 2 -1 -1 2 1 4 1 3
В первом наборе входных данных мы можем выполнить операцию $$$y = x \oplus y$$$.
Во втором наборе входных данных получить $$$(x,y)=(1,2)$$$ с помощью какой-либо последовательности операций невозможно.
В третьем наборе входных данных можно выполнить операцию $$$x = x\,\&\,y$$$, а после $$$y = y \oplus m$$$.
Название |
---|