Atcoder ABC307-C 以下のコードでACしないケースがわからない

実現したいこと

atcoder307 C問題で以下のような回答と作成しました。
ですが、どうしても4ケースだけWAしてしまいます。
このコードで、WAとなるようなケースは、どのような場合でしょうか。

前提

問題
https://atcoder.jp/contests/abc307/tasks/abc307_c

考え方

・"#"の座標だけ、A、B、Xそれぞれ読み込む(A,B,Xの要素群と呼ぶ)
・A、Bの要素群について、座標を-20~20の範囲で縦横それぞれずらして、Xのサブセットになっているか確認
・A,Bそれぞれ、適当に座標をずらした要素群が、Xのサブセットになっている場合、それらの要素群を結合し、結合した要素群が、Xと同じがどうかを比較

該当のソースコード

python

1#シートA中で"#"の座標を読み込み2ha, wa = map(int,input().split())3a = list()4for i in range(ha):5 tmp = list(input())6 for w in range(wa):7 if tmp[w] == "#":8 a.append((i,w))9 10#シートB中で"#"の座標を読み込み11hb, wb = map(int,input().split())12b = list()13for i in range(hb):14 tmp = list(input())15 for w in range(wb):16 if tmp[w] == "#":17 b.append((i,w))18 19#シートX中で"#"の座標を読み込み20hx, wx = map(int,input().split())21x = set()22for i in range(hx):23 tmp = list(input())24 for w in range(wx):25 if tmp[w] == "#":26 x.add((i,w))27 28 29a_exit = False30for d_h in range(-20, 21):#縦方向の移動範囲31 for d_w in range(-20, 21):#横方向の移動範囲32 new_a = list()33 for val in a:34 nh = val[0] + d_h#移動距離を足したy座標35 nw = val[1] + d_w#移動距離を足したx座標36 new_a.append((nh, nw))37 n_a_set = set(new_a)38 if n_a_set.issubset(x):#移動距離を足した座標の全要素が、Xの要素中に含まれているか39 a_exit = True#含まれていた場合、Aについての処理は終了40 break41 if a_exit:42 break43 44#前述の処理をBに対しても実施45b_exit = False46for d_h in range(-20, 21):47 for d_w in range(-20, 21):48 new_b = list()49 for val in b:50 nh = val[0] + d_h 51 nw = val[1] + d_w 52 new_b.append((nh, nw))53 n_b_set = set(new_b)54 if n_b_set.issubset(x):55 #print(n_b_set)56 b_exit = True57 break58 if b_exit:59 break60 61test_x = n_b_set.union(n_a_set)#AとBどちらもXのサブセットとなった要素群test_x62 63 64if test_x == x:#test_xとXが同じか確認65 print("Yes")66else:67 print("No")68

#試したこと
・10*10マスの四隅にある場合も試してみましたが、期待した値が取得できました。

コメントを投稿

0 コメント