結果
| 問題 |
No.2977 Kth Xor Pair
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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 |
ソースコード
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()