結果

問題 No.2977 Kth Xor Pair
ユーザー isee
提出日時 2024-12-03 19:37:18
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,571 bytes
コンパイル時間 275 ms
コンパイル使用メモリ 82,816 KB
実行使用メモリ 310,216 KB
最終ジャッジ日時 2024-12-03 19:37:54
合計ジャッジ時間 35,247 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 30 TLE * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = lambda: sys.stdin.readline().rstrip()

def count01(L, i):
    czero, cone = 0, 0
    for a in L:
        if (a >> i) & 1:
            cone += 1
        else:
            czero += 1
    return czero, cone

def div01(L, i):
    rzero, rone = [], []
    for a in L:
        (rone if (a >> i) & 1 else rzero).append(a)
    return rzero, rone

def main():
    # 入力
    N, K = map(int, input().split())
    A = list(map(int, input().split()))
    # 計算・出力
    # 0 <= i, j < N で考える
    K -= 1
    K *= 2
    K += N
    pairs = [[A, A]]  # 候補となる数の組
    ans = 0
    for i in range(29, -1, -1):
        ans <<= 1
        czero = 0
        for l, r in pairs:
            lz, lo = count01(l, i)
            rz, ro = count01(r, i)
            czero += lz * rz + lo * ro
        npairs = []
        if K >= czero:
            ans += 1
            K -= czero
            for l, r in pairs:
                lz, lo = div01(l, i)
                rz, ro = div01(r, i)
                if len(lz) > 0 and len(ro) > 0:
                    npairs.append([lz, ro])
                if len(lo) > 0 and len(rz) > 0:
                    npairs.append([lo, rz])
        else:
            for l, r in pairs:
                lz, lo = div01(l, i)
                rz, ro = div01(r, i)
                if len(lz) > 0 and len(rz) > 0:
                    npairs.append([lz, rz])
                if len(lo) > 0 and len(ro) > 0:
                    npairs.append([lo, ro])
        pairs = npairs

    print(ans)

if __name__ == "__main__":
    main()
0