不考虑空间超限,为啥会出错
#include<bits/stdc++.h>
using namespace std;
inline long long read(){
long long s=0;bool flag=1;char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-') flag=0;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=(s<<1)+(s<<3)+ch-'0';
ch=getchar();
}
if(flag) return s;
return -s;
}
long long n,a[55][55],b[55][55],t[6250005][4],cnt;
void dfs(int k,int c){
cnt=0;
for(int i=1;i<=c;i++){
for(int d=0;d<k;d++){
if(a[t[i][0]+d][t[i][1]+k-1]!=b[t[i][2]+d][t[i][3]+k-1])
goto A;
}
for(int d=0;d<k;d++){
if(a[t[i][0]+k-1][t[i][1]+d]!=b[t[i][2]+k-1][t[i][3]+d])
goto A;
}
t[++cnt][0]=t[i][0];t[cnt][1]=t[i][1];
t[cnt][2]=t[i][2];t[cnt][3]=t[i][3];
A:;
}
if(cnt==0) printf("%d",k-1);
else dfs(k+1,cnt);
return ;
}
int main(){
// freopen("arbiter.in","r",stdin);
// freopen("arbiter.out","w",stdout);
n=read();
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=read();
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) b[i][j]=read();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int z=1;z<=n;z++){
for(int w=1;w<=n;w++){
if(a[i][j]==b[z][w]){
t[++cnt][0]=i;t[cnt][1]=j;
t[cnt][2]=z;t[cnt][3]=w;
}
}
}
}
}
if(cnt==0) printf("0");
else dfs(2,cnt);
return 0;
}