結果
問題 |
No.2986 Permutation Puzzle
|
ユーザー |
![]() |
提出日時 | 2025-01-02 00:43:31 |
言語 | Lua (LuaJit 2.1.1734355927) |
結果 |
AC
|
実行時間 | 693 ms / 2,000 ms |
コード長 | 1,515 bytes |
コンパイル時間 | 584 ms |
コンパイル使用メモリ | 6,948 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2025-01-02 00:43:43 |
合計ジャッジ時間 | 11,060 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 40 |
ソースコード
function issame(n,b,a,icol,irow) for r=0,n-1 do for c=0,n-1 do if not (b[r][c] == a[irow[r]][icol[c]]) then return false end end end return true end local n,k = io.read("*n","*n") local a,b = {}, {} for r=0,n-1 do local row = {} for c=0,n-1 do row[c] = io.read("*n")-1 end a[r] = row end for r=0,n-1 do local row = {} for c=0,n-1 do row[c] = io.read("*n")-1 end b[r] = row end local ops,pp = {},{} for e=0, ((2*n)^k)-1 do local t = e local icol, irow, itmp = {},{},{} for i=0,n-1 do icol[i]=i irow[i]=i end for j=0,k-1 do local p = {} local op = t % (2*n) ops[j] = op t = math.floor((t-op) / (2*n)) if op < n then for r=0,n-1 do p[r] = a[irow[r]][icol[op]] itmp[p[r]] = icol[r] end icol,itmp=itmp,icol else for c=0,n-1 do p[c] = a[irow[op-n]][icol[c]] itmp[p[c]] = irow[c] end irow,itmp=itmp,irow end pp[j] = p end if issame(n,b,a,icol,irow) then break end end local cnt = 0 local ans = {} for j=k-1,0,-1 do local op = ops[j] local p = pp[j] local t,w = {},{} for i=0,n-1 do t[i]=i w[i]=p[i] end local z = op%n while true do local ok = true for i=0,n-1 do t[p[i]] = w[i] ok = ok and t[p[i]] == p[p[i]] end if ok then break end z = p[z] if op < n then ans[cnt] = z else ans[cnt] = z+n end cnt = cnt+1 w,t = t,w end end io.write(cnt,"\n") for i=0,cnt-1 do local op = ans[i] if op < n then io.write("C ", op+1) else io.write("R ", op+1-n) end io.write("\n") end