atcoder ABC 300 B - Same Map in the RPG World の実装(Python)
この問題ではPythonのNumpyのrollを使うと簡単に解けます。(参考:NumPy配列ndarrayをシフト(スクロール)させるnp.roll | note.nkmk.me)
・考え方:A,Bをndarrayにして、for文でAをH行とW列の数シフトさせる。最後に一致する場合はYesを出力して終了。
・注意:np.roll(A,0)はAを0回シフトすることを意味する。よって初めの入力でA=BだったとしてもYesと出力できる。
・実装例
import numpy as np H,W=map(int,input().split()) A_= [] for _ in range(H): A_.append(list(input())) B_= [] for _ in range(H): B_.append(list(input())) A=np.array(A_) #ndarrayにする B=np.array(B_) for i in range(H): for j in range(W): Ar0=np.roll(A,i,axis=0) #行をi回シフトする Ar1=np.roll(Ar0,j,axis=1) #列をj回シフトする if np.array_equal(Ar1,B): #AをシフトしたものがBと等しいか print("Yes") exit() print("No")