Каосар і Цикл#12326

Каосар і Цикл (Розбір)

Автор проблеми:

AlKaosar Hussain

Підготовлено:

AlKaosar Hussain

Редагував:

Hasan Saleh (MathModel)

Рішення

Функція починається з ans = a_1

Кожен наступний крок виконує

\text{ans} \gets \text{ans} \& \text{(OR попередніх елементів)}

Бітовий 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)