結果
| 問題 |
No.14 最小公倍数ソート
|
| コンテスト | |
| ユーザー |
pocarist
|
| 提出日時 | 2015-10-07 13:09:59 |
| 言語 | F# (F# 4.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,893 bytes |
| コンパイル時間 | 11,863 ms |
| コンパイル使用メモリ | 202,004 KB |
| 実行使用メモリ | 59,264 KB |
| 最終ジャッジ日時 | 2024-07-20 01:52:09 |
| 合計ジャッジ時間 | 16,946 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 TLE * 1 -- * 15 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.fsproj を復元しました (320 ms)。 MSBuild のバージョン 17.9.6+a4ecab324 (.NET) main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
// http://yukicoder.me/problems/38
open System
open System.Collections.Generic
let dpfn fmt = Printf.kprintf Diagnostics.Debug.WriteLine fmt
let factors n =
let i = ref 2
let tmp = ref n
seq {
while !i * !i <= n do
if !tmp % !i = 0 then
tmp := !tmp / !i
yield !i
else
incr i
if !tmp <> 1 then yield !tmp
}
[<EntryPoint>]
let main argv =
let add k m =
match Map.tryFind k m with
| None -> 0
| Some x -> x
|> fun v -> Map.add k (v+1) m
let merge a b =
Map.fold (fun a' bk bv ->
match Map.tryFind bk a' with
| None -> Map.add bk bv a'
| Some av -> Map.add bk (max av bv) a'
) a b
let pow (a : int) b =
bigint.Pow(bigint a, b)
let lcm a b =
merge a b
|> Map.fold (fun s k v -> s * pow k v) 1I
let lcmsort xs =
let rec f acc = function
| [] -> List.rev acc
| (a,m) :: ax ->
let ax' =
ax
|> List.map (fun (i,j) -> lcm m j, i, j)
|> List.sort
// |> fun x -> x |> List.map (fun (k,i,j) -> string (k,i,j)) |> String.concat " " |> dpfn "%s"; x
|> List.map (fun (_,i,j) -> i,j)
f (a :: acc) ax'
f [] xs
let N = Console.ReadLine().Trim() |> int
let A = Console.ReadLine().Trim().Split([|' '|]) |> Array.map int
A
|> List.ofArray
|> List.map (fun a -> a, factors a)
// |> fun x -> dpfn "%A" x; x
|> List.map (fun (a,fs) -> a, fs |> Seq.fold (fun m t -> add t m) Map.empty)
// |> fun x -> dpfn "%A" x; x
|> lcmsort
|> List.map string
|> String.concat " "
|> printfn "%s"
0 // 整数の終了コードを返します
pocarist