結果

問題 No.5001 排他的論理和でランニング
ユーザー GrayCoder
提出日時 2018-03-17 14:15:52
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 152 ms / 1,500 ms
コード長 932 bytes
コンパイル時間 64 ms
実行使用メモリ 24,492 KB
スコア 34,416,403
最終ジャッジ日時 2020-03-12 20:06:57
ジャッジサーバーID
(参考情報)
judge6 /
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 50
権限があれば一括ダウンロードができます

ソースコード

diff #

from collections import defaultdict

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 = defaultdict(list)
    for i in A:
        l = len(f'{i:b}') - 1
        num[l].append(i)

    rm = set()
    n = N - M
    ans = []
    for i, j in sorted(num.items(), reverse=1):
        while len(j) > 1:
            rm.add(num[i].pop(-1))
            if len(rm) == n:
                for k in num.values():
                    ans.extend(k)
                print(*ans, sep=' ')
                return
        break

    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

main()
0