結果
問題 | No.2986 Permutation Puzzle |
ユーザー | ID 21712 |
提出日時 | 2024-12-24 01:32:41 |
言語 | F# (F# 4.0) |
結果 |
AC
|
実行時間 | 1,331 ms / 2,000 ms |
コード長 | 2,628 bytes |
コンパイル時間 | 8,417 ms |
コンパイル使用メモリ | 200,180 KB |
実行使用メモリ | 60,292 KB |
最終ジャッジ日時 | 2024-12-24 01:33:23 |
合計ジャッジ時間 | 35,224 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 338 ms
36,664 KB |
testcase_01 | AC | 333 ms
36,680 KB |
testcase_02 | AC | 362 ms
36,700 KB |
testcase_03 | AC | 1,019 ms
60,268 KB |
testcase_04 | AC | 338 ms
36,540 KB |
testcase_05 | AC | 337 ms
36,712 KB |
testcase_06 | AC | 341 ms
36,932 KB |
testcase_07 | AC | 359 ms
36,616 KB |
testcase_08 | AC | 339 ms
36,720 KB |
testcase_09 | AC | 353 ms
38,100 KB |
testcase_10 | AC | 362 ms
36,660 KB |
testcase_11 | AC | 343 ms
36,716 KB |
testcase_12 | AC | 387 ms
42,188 KB |
testcase_13 | AC | 328 ms
36,764 KB |
testcase_14 | AC | 373 ms
37,304 KB |
testcase_15 | AC | 366 ms
39,172 KB |
testcase_16 | AC | 335 ms
36,364 KB |
testcase_17 | AC | 379 ms
37,396 KB |
testcase_18 | AC | 500 ms
50,832 KB |
testcase_19 | AC | 344 ms
36,596 KB |
testcase_20 | AC | 402 ms
38,684 KB |
testcase_21 | AC | 344 ms
37,160 KB |
testcase_22 | AC | 336 ms
36,792 KB |
testcase_23 | AC | 402 ms
39,964 KB |
testcase_24 | AC | 1,262 ms
60,272 KB |
testcase_25 | AC | 911 ms
60,292 KB |
testcase_26 | AC | 1,017 ms
60,280 KB |
testcase_27 | AC | 536 ms
47,720 KB |
testcase_28 | AC | 1,164 ms
60,120 KB |
testcase_29 | AC | 679 ms
60,164 KB |
testcase_30 | AC | 1,067 ms
60,156 KB |
testcase_31 | AC | 903 ms
60,152 KB |
testcase_32 | AC | 381 ms
40,252 KB |
testcase_33 | AC | 998 ms
60,284 KB |
testcase_34 | AC | 934 ms
60,284 KB |
testcase_35 | AC | 786 ms
60,104 KB |
testcase_36 | AC | 386 ms
38,516 KB |
testcase_37 | AC | 451 ms
45,104 KB |
testcase_38 | AC | 1,207 ms
60,092 KB |
testcase_39 | AC | 657 ms
60,168 KB |
testcase_40 | AC | 338 ms
36,640 KB |
testcase_41 | AC | 806 ms
59,684 KB |
testcase_42 | AC | 871 ms
59,944 KB |
testcase_43 | AC | 1,331 ms
60,108 KB |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.fsproj を復元しました (260 ms)。 MSBuild のバージョン 17.9.6+a4ecab324 (.NET) /home/judge/data/code/Main.fs(65,9): warning FS0025: この式のパターン マッチが不完全です たとえば、値 '[|_; _; _|]' はパターンに含まれないケースを示す可能性があります。 [/home/judge/data/code/main.fsproj] main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
module Main let readInts () : int array = stdin.ReadLine().Split([|' '|]) |> Array.map int type matrix = int[,] let reorderColsByColPerm (s : matrix) (x : int) : matrix = let t = Array2D.copy s for r = 1 to Array2D.length1 s do for c = 1 to Array2D.length2 s do let v = Array2D.get s (r-1) (c-1) let cx = Array2D.get s (c-1) (x-1) Array2D.set t (r-1) (cx-1) v t let reorderRowsByRowPerm (s : matrix) (y : int) : matrix = let t = Array2D.copy s for r = 1 to Array2D.length1 s do for c = 1 to Array2D.length2 s do let v = Array2D.get s (r-1) (c-1) let ry = Array2D.get s (y-1) (r-1) Array2D.set t (ry-1) (c-1) v t let rec search (b : matrix) (k : int) (t : matrix) (v : int array) : bool = if k = 0 then b = t else let n = Array2D.length1 b seq { 1..n*2 } |> Seq.exists (fun op -> Array.set v (Array.length v - k) op let s = if op <= n then reorderColsByColPerm t op else reorderRowsByRowPerm t (op-n) search b (k-1) s v ) let cycle (p : int array) : int = let rec f (cnt : int) (t : int array) (w : int array) : int = p |> Array.iteri (fun i e -> Array.set t (e-1) (Array.get w i)) if p = t then cnt else f (cnt+1) w t f 1 (Array.copy p) (Array.copy p) let solve (n : int) (k : int) (a : matrix) (b : matrix) : int array = let ops = Array.zeroCreate k ignore <| search b k a ops let f ((ans, s) : int array * matrix) (op : int) : int array * matrix = let p = if op <= n then s[*,op-1] else s[op-1-n,*] let t = if op <= n then reorderColsByColPerm s op else reorderRowsByRowPerm s (op-n) let cnt = cycle p - 1 let z0 = if op <= n then op else (op-n) let tmp = seq { 1..cnt } |> Seq.scan (fun z _ -> Array.get p (z-1)) z0 |> Seq.tail |> Seq.map (fun z -> if op <= n then z else (z+n)) |> Seq.toArray (Array.append tmp ans, t) ops |> Array.fold f ([||],a) |> fst [<EntryPoint>] let main (_args: string array) : int = let [|n; k|] = readInts() let a = array2D [|for _ in 1..n -> readInts()|] let b = array2D [|for _ in 1..n -> readInts()|] let ans = solve n k a b printfn "%d" (Array.length ans) let f (op : int) : string = if op <= n then (sprintf "C %d" op) else (sprintf "R %d" (op-n)) ans |> Array.map f |> Array.iter (printfn "%s") 0