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