32pts求调
查看原帖
32pts求调
788881
ririTLE楼主2024/7/27 19:31

不考虑空间超限,为啥会出错

#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;
}
2024/7/27 19:31
加载中...