結果
問題 | No.2986 Permutation Puzzle |
ユーザー | ID 21712 |
提出日時 | 2024-12-24 01:22:52 |
言語 | F# (F# 4.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,664 bytes |
コンパイル時間 | 8,177 ms |
コンパイル使用メモリ | 198,856 KB |
実行使用メモリ | 60,292 KB |
最終ジャッジ日時 | 2024-12-24 01:23:45 |
合計ジャッジ時間 | 47,110 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 392 ms
36,592 KB |
testcase_01 | AC | 386 ms
36,324 KB |
testcase_02 | AC | 388 ms
36,604 KB |
testcase_03 | AC | 1,675 ms
60,160 KB |
testcase_04 | AC | 388 ms
36,560 KB |
testcase_05 | AC | 389 ms
36,512 KB |
testcase_06 | AC | 429 ms
36,428 KB |
testcase_07 | AC | 394 ms
36,240 KB |
testcase_08 | AC | 387 ms
36,736 KB |
testcase_09 | AC | 466 ms
39,320 KB |
testcase_10 | AC | 386 ms
36,440 KB |
testcase_11 | AC | 393 ms
36,748 KB |
testcase_12 | AC | 515 ms
46,636 KB |
testcase_13 | AC | 388 ms
36,404 KB |
testcase_14 | AC | 401 ms
37,468 KB |
testcase_15 | AC | 472 ms
41,200 KB |
testcase_16 | AC | 386 ms
36,120 KB |
testcase_17 | AC | 404 ms
37,496 KB |
testcase_18 | AC | 702 ms
60,032 KB |
testcase_19 | AC | 397 ms
36,432 KB |
testcase_20 | AC | 434 ms
40,296 KB |
testcase_21 | AC | 411 ms
37,756 KB |
testcase_22 | AC | 392 ms
36,660 KB |
testcase_23 | AC | 487 ms
42,740 KB |
testcase_24 | TLE | - |
testcase_25 | AC | 1,382 ms
60,028 KB |
testcase_26 | AC | 1,418 ms
59,988 KB |
testcase_27 | AC | 632 ms
57,156 KB |
testcase_28 | AC | 1,611 ms
59,908 KB |
testcase_29 | AC | 896 ms
60,028 KB |
testcase_30 | AC | 1,598 ms
60,160 KB |
testcase_31 | AC | 1,370 ms
60,168 KB |
testcase_32 | AC | 490 ms
43,168 KB |
testcase_33 | AC | 1,531 ms
59,904 KB |
testcase_34 | AC | 1,386 ms
60,168 KB |
testcase_35 | AC | 1,205 ms
59,840 KB |
testcase_36 | AC | 435 ms
40,040 KB |
testcase_37 | AC | 580 ms
52,464 KB |
testcase_38 | AC | 1,635 ms
59,852 KB |
testcase_39 | AC | 935 ms
60,156 KB |
testcase_40 | AC | 382 ms
36,076 KB |
testcase_41 | AC | 1,205 ms
59,848 KB |
testcase_42 | AC | 1,288 ms
60,232 KB |
testcase_43 | TLE | - |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.fsproj を復元しました (297 ms)。 MSBuild のバージョン 17.9.6+a4ecab324 (.NET) /home/judge/data/code/Main.fs(66,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 readLine () : 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 = Array2D.copy t let w = if op <= n then reorderColsByColPerm s op else reorderRowsByRowPerm s (op-n) search b (k-1) w 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|] = readLine() let a = array2D [|for _ in 1..n -> readLine()|] let b = array2D [|for _ in 1..n -> readLine()|] 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