結果

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

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 37 ms
52,480 KB
testcase_01 AC 38 ms
52,096 KB
testcase_02 AC 64 ms
70,912 KB
testcase_03 AC 61 ms
69,632 KB
testcase_04 AC 66 ms
72,576 KB
testcase_05 AC 62 ms
70,528 KB
testcase_06 AC 66 ms
72,448 KB
testcase_07 AC 534 ms
205,656 KB
testcase_08 AC 973 ms
271,112 KB
testcase_09 AC 865 ms
274,140 KB
testcase_10 AC 786 ms
274,552 KB
testcase_11 AC 839 ms
274,000 KB
testcase_12 AC 773 ms
269,812 KB
testcase_13 AC 832 ms
278,660 KB
testcase_14 AC 520 ms
203,188 KB
testcase_15 AC 729 ms
273,472 KB
testcase_16 AC 870 ms
274,248 KB
testcase_17 AC 867 ms
271,504 KB
testcase_18 AC 845 ms
271,696 KB
testcase_19 AC 886 ms
270,288 KB
testcase_20 AC 873 ms
271,176 KB
testcase_21 AC 840 ms
274,128 KB
testcase_22 TLE -
testcase_23 TLE -
testcase_24 TLE -
testcase_25 AC 897 ms
271,316 KB
testcase_26 TLE -
testcase_27 AC 526 ms
210,172 KB
testcase_28 AC 391 ms
248,132 KB
testcase_29 AC 422 ms
242,764 KB
testcase_30 AC 491 ms
242,464 KB
testcase_31 AC 504 ms
210,300 KB
testcase_32 AC 444 ms
242,936 KB
testcase_33 AC 458 ms
258,520 KB
testcase_34 AC 447 ms
247,424 KB
testcase_35 AC 447 ms
250,196 KB
権限があれば一括ダウンロードができます

ソースコード

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