BUPT计院机试2015 第三题:图像压缩存储

这个maxn再多一个0就不行了会提示Error: value of 0000000950a9a44b too large for field of 4 bytes at 000000000000008b
emmm不知道测试会怎么样,刚开始还用两个矩阵,然后发现第二个矩阵多余

原题:
第三题:图像压缩存储
描述:以二维数组表示图像,其值只有0、1两种,寻找两幅图像中最大的相同部分
输入:第一行输入一个n,接下来的2n行输入两个n * n数组,寻找一个最大的m * m子区域,使得两个数组在该子区域完全相同
输出:输出上诉m
样例输入:
4
1 1 1 1
1 1 1 0
1 1 1 0
1 1 1 1
0 1 1 1
0 1 1 1
0 1 1 1
0 1 1 0
样例输出:
2
解释:上诉两个4阶数组中的一个2阶子区域(第1、2行,第2、3列完全相同)

#include<iostream>
using namespace std;
const int maxn=10010;
int G[maxn][maxn];
int n;
bool same[maxn][maxn]={false};
int look(int x,int y){
	int m=1;
	for(int a=1;a<n-x;a++){
		bool flag=true;
		for(int i=x;i<=x+a;i++){
			for(int j=y;j<=y+a;j++){
				if(!same[i][j]){
					flag=false;
					break;	
				}
			} 
		}if(flag) m++;
	}return m;
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			scanf("%d",&G[i][j]);
		}
	}for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			int d;
			scanf("%d",&d);
			if(G[i][j]==d) same[i][j]=true;
		}
	}
	int num=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(same[i][j]){
				num=max(num,look(i,j));
			}
		}
	}cout<<num<<endl;
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_32719923/article/details/88756261