結果
問題 |
No.5001 排他的論理和でランニング
|
ユーザー |
|
提出日時 | 2018-03-17 14:44:30 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 678 ms / 1,500 ms |
コード長 | 1,167 bytes |
コンパイル時間 | 64 ms |
実行使用メモリ | 24,576 KB |
スコア | 30,714,227 |
最終ジャッジ日時 | 2020-03-12 20:09:42 |
ジャッジサーバーID (参考情報) |
judge10 / |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 50 |
ソースコード
from collections import defaultdict from itertools import chain def main(): N, M = map(int, input().split()) A = set(map(int, input().split())) if M == 1: print(max(N)) return if N == M: print(*A, sep=' ') return num = digits(A) rm = set() n = N - M ans = [] while len(rm) < n: for i, j in sorted(num.items(), reverse=1): if not len(j) % 2: rm.add(num[i].pop(0)) if len(rm) == n: for k in num.values(): ans.extend(k) print(*ans, sep=' ') return break else: break num = digits(list(chain.from_iterable(num.values()))) for i, j in sorted(num.items()): while len(j) > 0: rm.add(num[i].pop(-1)) if len(rm) == n: for k in num.values(): ans.extend(k) print(*ans, sep=' ') return def digits(a): num = defaultdict(list) for i in a: l = len(f'{i:b}') - 1 num[l].append(i) return num main()