結果
問題 | No.2986 Permutation Puzzle |
ユーザー |
![]() |
提出日時 | 2024-12-20 17:21:01 |
言語 | Ruby (3.4.1) |
結果 |
AC
|
実行時間 | 1,252 ms / 2,000 ms |
コード長 | 1,801 bytes |
コンパイル時間 | 704 ms |
コンパイル使用メモリ | 7,424 KB |
実行使用メモリ | 12,928 KB |
最終ジャッジ日時 | 2024-12-20 17:21:28 |
合計ジャッジ時間 | 25,359 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
外部呼び出し有り |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 40 |
コンパイルメッセージ
Syntax OK
ソースコード
if ARGV.size == 0system("ruby -W0 --jit -- %s run"%$0)exitendARGV.popclass PPuzzleattr_reader :ndef initialize(n,icol=[],irow=[],matrix=[])@n = n@icol = icol@irow = irow@matrix = matrixenddef read()@icol = @n.times.to_a@irow = @n.times.to_a@matrix = @n.times.map{gets.chomp.split.map{|s|s.to_i-1}}selfenddef clone()PPuzzle.new(@n,@icol.dup,@irow.dup,@matrix)enddef at(r,c)@matrix[@irow[r]][@icol[c]]enddef select_col(x)@n.times.map{|r|self.at(r,x)}enddef select_row(y)@n.times.map{|c|self.at(y,c)}enddef operate_col(x)pa = self.select_col(x)t = @icol.dup@n.times{|i| @icol[pa[i]] = t[i] }enddef operate_row(y)pa = self.select_row(y)t = @irow.dup@n.times{|i| @irow[pa[i]] = t[i] }enddef ==(other)@n.times.all?{|r| @n.times.all?{|c| self.at(r,c)==other.at(r,c) }}endenddef search(b,k,t,v)return t==b if k==0for i in t.select_col(0)v.push(i)s = t.clones.operate_col(i)return true if search(b,k-1,s,v)v.popv.push(i+b.n)s = t.clones.operate_row(i)return true if search(b,k-1,s,v)v.popendfalseenddef cycle(p)t=[0]*p.sizew=p.duploop.with_index(1) {|_,cnt|p.size.times{|i| t[p[i]] = w[i] }break cnt if t == pt,w = [w,t]}enddef solve(n,k,a,b)ops = []search(b,k,a,ops)s=a.cloneans = []ops.each{|op|if op<npa = s.select_col(op)s.operate_col(op)elsepa = s.select_row(op-n)s.operate_row(op-n)endz = op % ntmp = []cycle(pa).pred.times {z = pa[z]tmp.push(op<n ? z : (z+n))}ans = tmp+ans}ansendn, k = gets.chomp.split.map{|s|s.to_i}a = PPuzzle.new(n).read()b = PPuzzle.new(n).read()ans = solve(n,k,a,b)puts ans.sizeputs ans.map{|op| op<n ? "C %d"%(op+1) : "R %d"%(op+1-n) }*"\n"