結果
| 問題 |
No.14 最小公倍数ソート
|
| ユーザー |
|
| 提出日時 | 2015-12-05 02:47:59 |
| 言語 | Python2 (2.7.18) |
| 結果 |
AC
|
| 実行時間 | 590 ms / 5,000 ms |
| コード長 | 956 bytes |
| コンパイル時間 | 257 ms |
| コンパイル使用メモリ | 6,912 KB |
| 実行使用メモリ | 21,948 KB |
| 最終ジャッジ日時 | 2024-09-14 14:16:19 |
| 合計ジャッジ時間 | 8,281 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 20 |
ソースコード
# -*- coding: utf-8 -*-
inf = 1e9
def gcd(p, q):
if q == 0:
return p
return gcd(q, p % q)
def lcm(p, q):
return p / gcd(p, q) * q
N = input()
A = map(int, raw_input().split())
S = [[] for i in xrange(10001)]
div = [[] for i in xrange(N)]
for i in xrange(N):
j = 1
while j * j <= A[i]:
if A[i] % j == 0:
div[i].append(j)
S[j].append([A[i], i])
if j * j != A[i]:
div[i].append(A[i] / j)
S[A[i] / j].append([A[i], i])
j += 1
for i in xrange(len(S)):
S[i].sort()
vis = [0] * N
ans = [A[0]]
ind = 0
for i in xrange(N - 1):
num = ans[i]
vis[ind] = 1
m = (inf, 0, 0)
for j in div[ind]:
while len(S[j]) and vis[S[j][0][1]]:
S[j].pop(0)
if len(S[j]):
m = min(m, (lcm(num, S[j][0][0]), S[j][0][0], S[j][0][1]))
ans.append(m[1])
ind = m[2]
print " ".join(map(str, ans))