結果
問題 |
No.2118 遺伝的有限集合の数え上げ
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:28:11 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 41 ms / 2,000 ms |
コード長 | 973 bytes |
コンパイル時間 | 289 ms |
コンパイル使用メモリ | 82,780 KB |
実行使用メモリ | 55,480 KB |
最終ジャッジ日時 | 2025-03-20 20:29:28 |
合計ジャッジ時間 | 3,115 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 37 |
ソースコード
import sys from collections import deque def main(): N = int(sys.stdin.readline()) if N == 0: print("{}") return required = set() queue = deque([N]) required.add(N) while queue: current = queue.popleft() i = 0 bits = [] while (1 << i) <= current: if (current >> i) & 1: bits.append(i) i += 1 for bit in bits: if bit not in required: required.add(bit) queue.append(bit) sorted_n = sorted(required) memo = {} for n in sorted_n: i = 0 bits = [] while (1 << i) <= n: if (n >> i) & 1: bits.append(i) i += 1 bits.sort() elements = [memo[bit] for bit in bits] elements_str = ",".join(elements) memo[n] = "{" + elements_str + "}" print(memo[N]) if __name__ == "__main__": main()