結果
| 問題 |
No.2986 Permutation Puzzle
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 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
ID 21712