VS load(){
ll H,W;cin>>H>>W;
VS S(H);
rep(i,H)cin>>S[i];
return S;
}
VS paint(VS A, VS B, ll dy, ll dx){
ll H = B.size();
ll W = B[0].size();
rep(i,H){
rep(j,W){
if(B[i][j]=='#'){
A[i+dy][j+dx] = B[i][j];
}
}
}
return A;
}
VS crop(VS A){
ll H = A.size();
ll W = A[0].size();
ll min_y=inf;
ll min_x=inf;
ll max_y=-inf;
ll max_x=-inf;
rep(i,H){
rep(j,W){
if(A[i][j]=='#'){
chmin(min_y,i);
chmin(min_x,j);
chmax(max_y,i);
chmax(max_x,j);
}
}
}
VS ret;
FOR(i,min_y, max_y+1){
string s;
FOR(j,min_x, max_x+1){
s.push_back(A[i][j]);
}
ret.push_back(s);
}
return ret;
}
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
VS A = load(); A=crop(A);
VS B = load(); B=crop(B);
VS X = load(); X=crop(X);
VS plain = VS(20, string(20,'.'));
rep(dy0,11){
rep(dx0,11){
rep(dy1,11){
rep(dx1,11){
VS temp = paint(plain, A, dy0, dx0);
temp = paint(temp, B, dy1, dx1);
VS cropped = crop(temp);
if(cropped==X)yes();
}
}
}
}
no();
return 0;
}
コーナーケース
筋肉解法