终于补出来了!
#include<bits/stdc++.h>
using namespace std;
int n, m, k, T;
char t[5][5];
char ex[5][5][5];
char h[5][5][5];
int flag;
int n1[5];
int n2[5];
bool check(int idx, int x, int y){
for(int i = 1; i <= 4; i++){
for(int j = 1; j <= 4; j++){
if(ex[idx][i][j] == '#' && (i + x < 1 || i + x > 4 || j + y < 1 || j + y > 4))
return 0;
}
}
return 1;
}
void change(int idx){
memcpy(t, ex[idx], sizeof t);
for(int i = 1; i <= 4; i++){
for(int j = 1; j <= 4; j++){
ex[idx][i][j] = t[4 - j + 1][i]; // 旋转90度
}
}
}
void dfs(int idx){
if(idx >= 4){
memset(t, 0, sizeof t);
for(int e = 1; e <= 3; e++){
for(int i = 1; i <= 4; i++){
for(int j = 1; j <= 4; j++){
if(ex[e][i][j] == '#'){
t[i + n1[e]][j + n2[e]] += 1; // 好大的一个坑,刚开始写成了 t[i + n1[e]][j + n2[e]] = 1; 忘了不能覆盖
}
}
}
}
for(int i = 1; i <= 4; i++){
for(int j = 1; j <= 4; j++){
if(t[i][j] != 1){
return ;
}
}
}
flag = 1;
return ;
}
for(int e = 1; e <= 4; e++){ // 因为要旋转3次
for(int i = -3; i <= 3; i++){
for(int j = -3; j <= 3; j++){
if(check(idx, i, j)){
n1[idx] = i;
n2[idx] = j;
dfs(idx + 1);
}
}
}
change(idx);
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
for(int t = 1; t <= 3; t++){
for(int i = 1; i <= 4; i++){
for(int j = 1; j <= 4; j++){
cin>>ex[t][i][j];
}
}
}
dfs(1);
if(flag){ // 全局变量
cout<<"Yes\n";
}
else cout<<"No\n";
return 0;
}