結果
問題 | No.14 最小公倍数ソート |
ユーザー |
![]() |
提出日時 | 2021-03-28 18:43:48 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 294 ms / 5,000 ms |
コード長 | 912 bytes |
コンパイル時間 | 327 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 21,760 KB |
最終ジャッジ日時 | 2024-11-29 09:19:10 |
合計ジャッジ時間 | 5,179 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 20 |
ソースコード
from collections import defaultdict import heapq from math import gcd def getdiv(n): res = set() for i in range(1, int(n ** 0.5) + 1): if n % i == 0: res.add(i) res.add(n // i) return tuple(sorted(res)) N = int(input()) A = list(map(int, input().split())) div = [getdiv(a) for a in A] d = defaultdict(list) for i, a in enumerate(A): for x in div[i]: heapq.heappush(d[x], (a, i)) seen = [0] * N seen[0] = 1 ans = [0] a = A[0] now = 0 for _ in range(N - 1): min_val = 10 ** 18 min_x = -1 for x in div[now]: while d[x] and seen[d[x][0][1]]: heapq.heappop(d[x]) if not d[x]: continue tmp_val = d[x][0][0]//x if tmp_val < min_val: min_val = tmp_val min_x = x a, now = heapq.heappop(d[min_x]) ans.append(now) seen[now] = 1 print(*[A[i] for i in ans])