Автор проблеми: | AlKaosar Hussain |
Підготовлено: | AlKaosar Hussain |
Редагував: | Hasan Saleh (MathModel) |
Рішення
Функція починається з ans = a_1
Кожен наступний крок виконує
Бітовий AND може лише видаляти біти, ніколи не додаючи.
Отже, остаточне значення ніколи не може перевищувати .
Тому, якщо ми хочемо f(p) = k, то найпростіший і найнадійніший вибір: a_1 = k
Як тільки стає , нам просто потрібно уникати видалення його бітів.
Для решти позицій виберіть будь-які різні цілі числа, які \le 10^{18}, тому що ми виконуємо OR з a_1
з усіма числами, а потім ANDing їх, тому коли ми OR, ми отримуємо ті біти, які маємо в , і оскільки a_1=k, то
ANDing їх залишає нас з , тому відповідь - будь-яка послідовність, що починається з і має різні значення.
Складність .
for _ in range(int(input())):
n,k=map(int,input().split())
ans=[k]
cur=1
while(len(ans)<n):
if(cur!=k):
ans.append(cur)
cur+=1
print(*ans)