結果

問題 No.2024 Xer
コンテスト
ユーザー kidodesu
提出日時 2026-07-19 18:31:24
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 176 ms / 2,000 ms
+ 763µs
コード長 2,044 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 573 ms
コンパイル使用メモリ 95,984 KB
実行使用メモリ 145,152 KB
最終ジャッジ日時 2026-07-19 18:31:39
合計ジャッジ時間 8,623 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 47
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

def main():
    n, x = list(map(int, input().split()))
    A = list(map(int, input().split()))
    if not x:
        if len(set(A)) == n:
            return "Yes"
        else:
            return "No"
    for i in range(29, -1, -1):
        if x >> i & 1:
            break
    idx = i
    y = pow(2, i+1)
    D = {}
    for a in A:
        b = a // y
        if b in D:
            D[b].append(a)
        else:
            D[b] = [a]
    for d in D:
        X = []
        Y = []
        for a in D[d]:
            if a >> idx & 1:
                X.append(a)
            else:
                Y.append(a)
        X.sort()
        Y.sort()
        if 1 < abs(len(X)-len(Y)):
            return "No"
        if len(X) != len(Y):
            if len(X) < len(Y):
                X, Y = Y, X
            Z = []
            for i in range(len(X)+len(Y)):
                if not i % 2:
                    Z.append(X[i//2])
                else:
                    Z.append(Y[i//2])
            for i in range(len(X)+len(Y)-1):
                if Z[i]^x < Z[i+1] and Z[i] < Z[i+1]^x:
                    pass
                else:
                    return "No"
        else:
            Z = []
            f0 = f1 = 1
            for i in range(len(X)+len(Y)):
                if not i % 2:
                    Z.append(X[i//2])
                else:
                    Z.append(Y[i//2])
            for i in range(len(X)+len(Y)-1):
                if Z[i]^x < Z[i+1] and Z[i] < Z[i+1]^x:
                    pass
                else:
                    f0 = 0
            X, Y = Y, X
            Z = []
            for i in range(len(X)+len(Y)):
                if not i % 2:
                    Z.append(X[i//2])
                else:
                    Z.append(Y[i//2])
            for i in range(len(X)+len(Y)-1):
                if Z[i]^x < Z[i+1] and Z[i] < Z[i+1]^x:
                    pass
                else:
                    f1 = 0
            if not f0 and not f1:
                return "No"
    return "Yes"

print(main())
0