結果

問題 No.2986 Permutation Puzzle
コンテスト
ユーザー flippergo
提出日時 2026-09-01 10:38:31
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
WA  
実行時間 -
コード長 2,137 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,256 ms
コンパイル使用メモリ 96,204 KB
実行使用メモリ 96,900 KB
最終ジャッジ日時 2026-09-01 10:38:40
合計ジャッジ時間 5,617 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2 WA * 1 TLE * 1
other -- * 40
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import copy
N,K = map(int,input().split())
A = [list(map(int,input().split())) for _ in range(N)]
A = [[A[i][j]-1 for j in range(N)] for i in range(N)]
B = [list(map(int,input().split())) for _ in range(N)]
B = [[B[i][j]-1 for j in range(N)] for i in range(N)]
C = copy.deepcopy(B)
def inv_b(b):
    c = [(b[i],i) for i in range(N)]
    c = sorted(c,key=lambda x:x[0])
    c = [c[i][1] for i in range(N)]
    return c
def row_tr(b):
    global B,C
    for k in range(N):
        for j1 in range(N):
            C[b[k]][j1] = B[k][j1]
    B = copy.deepcopy(C)
def col_tr(b):
    global B,C
    for k in range(N):
        for i1 in range(N):
            C[i1][b[k]] = B[i1][k]
    B = copy.deepcopy(C)
ans = []
def dfs(x,i):
    global A,B,C,ans
    if len(ans)>K:
        return False
    flag = True
    for i in range(N):
        for j in range(N):
            if A[i][j]!=B[i][j]:
                flag = False
                break
        if not flag:break
    if flag:
        return flag
    for y in ["R","C"]:
        for j in range(N):
            if y=="R":
                b = [0]*N
                for k in range(N):
                    b[k] = B[j][k]
                row_tr(b)
            else:
                b = [0]*N
                for k in range(N):
                    b[k] = B[k][j]
                col_tr(b)
            ans.append((y,j+1))
            flag = dfs(y,j)
            if flag:
                return flag
            if y=="R":
                row_tr(inv_b(b))
            else:
                col_tr(inv_b(b))
            ans.pop()
    return False
flag = False
for x in ["R","C"]:
    for i in range(N):
        if x=="R":
            b = [0]*N
            for k in range(N):
                b[k] = B[i][k]
            row_tr(b)
        else:
            b = [0]*N
            for k in range(N):
                b[k] = B[k][i]
            col_tr(b)
        ans.append((x,i+1))
        flag = dfs(x,i)
        if flag:break
        if x=="R":
            row_tr(inv_b(b))
        else:
            col_tr(inv_b(b))
        ans.pop()
    if flag:break
print(len(ans))
for x,i in ans:
    print(x,i)     
0