結果

問題 No.2977 Kth Xor Pair
ユーザー isee
提出日時 2024-12-03 19:25:51
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,444 bytes
コンパイル時間 248 ms
コンパイル使用メモリ 81,920 KB
実行使用メモリ 440,948 KB
最終ジャッジ日時 2024-12-03 19:26:28
合計ジャッジ時間 34,758 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 30 TLE * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

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

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
        divs = []
        for l, r in pairs:
            ld, rd = div01(l, i), div01(r, i)
            divs.append([ld, rd])
            lz, lo, rz, ro = len(ld[0]), len(ld[1]), len(rd[0]), len(rd[1])
            czero += lz * rz + lo * ro
        npairs = []
        if K >= czero:
            ans += 1
            K -= czero
            for ld, rd in divs:
                if len(ld[0]) > 0 and len(rd[1]) > 0:
                    npairs.append([ld[0], rd[1]])
                if len(ld[1]) > 0 and len(rd[0]) > 0:
                    npairs.append([ld[1], rd[0]])
        else:
            for ld, rd in divs:
                if len(ld[0]) > 0 and len(rd[0]) > 0:
                    npairs.append([ld[0], rd[0]])
                if len(ld[1]) > 0 and len(rd[1]) > 0:
                    npairs.append([ld[1], rd[1]])
        pairs = npairs
        # print(K, czero, pairs)

    print(ans)

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