結果

問題 No.2977 Kth Xor Pair
ユーザー iseeisee
提出日時 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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 40 ms
52,480 KB
testcase_01 AC 39 ms
52,096 KB
testcase_02 AC 77 ms
76,160 KB
testcase_03 AC 70 ms
73,344 KB
testcase_04 AC 78 ms
76,404 KB
testcase_05 AC 68 ms
73,984 KB
testcase_06 AC 78 ms
76,092 KB
testcase_07 AC 588 ms
161,228 KB
testcase_08 AC 968 ms
232,400 KB
testcase_09 AC 859 ms
213,092 KB
testcase_10 AC 866 ms
215,844 KB
testcase_11 AC 875 ms
221,136 KB
testcase_12 AC 850 ms
215,496 KB
testcase_13 AC 929 ms
234,220 KB
testcase_14 AC 562 ms
160,028 KB
testcase_15 AC 831 ms
204,236 KB
testcase_16 AC 950 ms
238,728 KB
testcase_17 AC 904 ms
239,444 KB
testcase_18 AC 920 ms
240,856 KB
testcase_19 AC 945 ms
241,368 KB
testcase_20 AC 945 ms
239,644 KB
testcase_21 AC 913 ms
238,680 KB
testcase_22 TLE -
testcase_23 TLE -
testcase_24 TLE -
testcase_25 AC 893 ms
239,452 KB
testcase_26 TLE -
testcase_27 AC 746 ms
215,576 KB
testcase_28 AC 478 ms
187,104 KB
testcase_29 AC 551 ms
215,868 KB
testcase_30 AC 629 ms
208,204 KB
testcase_31 AC 655 ms
188,828 KB
testcase_32 AC 560 ms
243,880 KB
testcase_33 AC 632 ms
258,592 KB
testcase_34 AC 546 ms
205,844 KB
testcase_35 AC 579 ms
234,788 KB
権限があれば一括ダウンロードができます

ソースコード

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