結果
| 問題 |
No.2986 Permutation Puzzle
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2025-02-17 02:59:21 |
| 言語 | Scheme (Gauche-0.9.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,619 bytes |
| コンパイル時間 | 222 ms |
| コンパイル使用メモリ | 7,080 KB |
| 実行使用メモリ | 34,436 KB |
| 最終ジャッジ日時 | 2025-02-17 02:59:27 |
| 合計ジャッジ時間 | 4,672 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 TLE * 1 |
| other | -- * 40 |
ソースコード
#!/usr/bin/env gosh
; (use gauche.collection)
(use gauche.sequence) ; ref for-each-with-index
(use gauche.uvector) ; list->u8vector u8vector-map u8vector= u8vector-copy
(use gauche.array) ; array-ref array-retabulate make-u8array
(define (mref a irow icol r c)
(array-ref a (ref irow r) (ref icol c)))
(define (select-col a irow icol x)
(u8vector-map (^r (array-ref a r (ref icol x))) irow))
(define (select-row a irow icol y)
(u8vector-map (^c (array-ref a (ref irow y) c)) icol))
(define (rotate-indexes indexes perm)
(let ([v (u8vector-copy indexes)])
(for-each-with-index (^(i e)
(set! (ref v e) (ref indexes i))) perm)
v))
(define (findi-map n f)
(let recur ([i 0]) (if (= i n) #f
(let ([r (f i)])
(if (boolean r) r (recur (+ i 1)))))))
(define (findi n f) (findi-map n (^i (and (f i) i))))
(define (is-same n b a irow icol)
(not (findi-map n (^r (findi-map n (^c
(not (= (array-ref b r c) (mref a irow icol r c)))))))))
(define (make-indexes n) (list->u8vector (iota n)))
(define (search-ops n b k a)
(let recur ([i 0]
[irow (make-indexes n)]
[icol (make-indexes n)])
(if (= i k) (and (is-same n b a irow icol) '())
(findi-map (* 2 n) (^(op)
(let* ([perm (if (< op n)
(select-col a irow icol op)
(select-row a irow icol (- op n)))]
[irow2 (if (< op n) irow (rotate-indexes irow perm))]
[icol2 (if (< op n) (rotate-indexes icol perm) icol)]
[ops (recur (+ i 1) irow2 icol2)])
(and (boolean ops) (cons (cons op perm) ops))))))))
(define (solve n k a b)
(concatenate (map reverse
(map (^(opperm)
(let* ([op (car opperm)]
[perm (cdr opperm)]
[zz (if (< op n) 0 n)])
(let recur ([z (ref perm (modulo op n))]
[w (rotate-indexes perm perm)]
[ops '()])
(if (u8vector= w perm) ops
(recur (ref perm z)
(rotate-indexes w perm)
(cons (+ z zz) ops))))))
(reverse (search-ops n b k a))))))
(define (read-matrix n)
(let ([a (make-u8array (shape 0 n 0 n) 0)])
(array-retabulate! a (^(i j) (- (read) 1)))
a))
(define (main args)
(let* ([n (read)]
[k (read)]
[a (read-matrix n)]
[b (read-matrix n)]
[ans (solve n k a b)])
(print (length ans))
(for-each (^(op)
(if (< op n)
(format #t "C ~D~%" (+ op 1))
(format #t "R ~D~%" (- op n -1))))
ans))
0)
ID 21712