結果
| 問題 | No.14 最小公倍数ソート |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-11-21 11:46:04 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 83 ms / 5,000 ms |
| コード長 | 797 bytes |
| コンパイル時間 | 10,679 ms |
| コンパイル使用メモリ | 219,904 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-10 20:12:34 |
| 合計ジャッジ時間 | 12,330 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 20 |
ソースコード
package main
import (
"fmt"
"sort"
)
func divisors(num int) []int {
var ret []int
for i := 1; i*i <= num; i++ {
if num%i == 0 {
ret = append(ret, i)
if i*i != num {
ret = append(ret, num/i)
}
}
}
sort.Ints(ret)
return ret
}
var dp, m [10001]int
func main() {
var N int
fmt.Scan(&N)
A := make([]int, N)
for i := 0; i < N; i++ {
fmt.Scan(&A[i])
m[A[i]]++
}
next := A[0]
m[next]--
fmt.Print(next)
for i := 0; i < N-1; i++ {
divisor := divisors(next)
check := 99999
ans := 0
for _, d := range divisor {
for d*dp[d] <= 10000 {
if m[d*dp[d]] > 0 {
if check <= dp[d] {
break
}
ans = d * dp[d]
check = dp[d]
} else {
dp[d]++
}
}
}
next = ans
m[next]--
fmt.Print(" ", next)
}
fmt.Print("\n")
}