考え方
A, B, Xは少なくとも1つの黒マスを含むため,A, BはXと必ず重なる.Xの左上のマスの座標を(9, 9)として,A, Bそれぞれの左上のマスが(0, 0)〜(19, 19)となる場合を全探索する.
全部の黒マスを使ったかどうかをsetで管理する.
回答例
HA, WA = map(int, input().split()) A = [list(input()) for _ in range(HA)] HB, WB = map(int, input().split()) B = [list(input()) for _ in range(HB)] HX, WX = map(int, input().split()) X = [list(input()) for _ in range(HX)] PA = set((i, j) for i in range(HA) for j in range(WA) if A[i][j]=='#') PB = set((i, j) for i in range(HB) for j in range(WB) if B[i][j]=='#') for xA in range(20): for yA in range(20): for xB in range(20): for yB in range(20): flag = False PA2 = set() PB2 = set() for i in range(HX): for j in range(WX): x = i + 9 y = j + 9 col = '.' if (0 <= x - xA < HA and 0 <= y - yA < WA and A[x-xA][y-yA] == '#'): col = '#' PA2.add((x - xA, y - yA)) if (0 <= x - xB < HB and 0 <= y - yB < WB and B[x-xB][y-yB] == '#'): col = '#' PB2.add((x - xB, y - yB)) if X[i][j] != col: flag = True break if flag: break if not flag and PA == PA2 and PB == PB2: exit(print('Yes')) print('No')