传统弱校HFUT的蒟蒻,真相只有一个

BUPT复试专题—图像压缩存储(2015)

题目描述

以二维数组表示图像,其值只有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

来源

2015机考C题 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
using namespace std;
int a[100][100];
int donser(int num,int sum,int real)
{
    if(sum<1) return 0;
    for(int i=1;i<=num-sum+1;i++)
    {
        for(int j=1;j<=num-sum+1;j++)
        {
            if(a[i][j]==0)
            {
                real=1;
                for(int m=i;m<=i+sum;m++)
                {
                    for(int n=j;n<=i+sum;n++)
                    {
                        if(a[m][n]!=0||m>num+1||n>num+1)
                        {
                            real=0;
                        }
                    }
                }
            }
            if(real==1) return sum;
        }
    }
    sum--;
    donser(num,sum,0);
}
int main()
{
    int num=0,sum=0;
    while(scanf("%d",&num)!=EOF)
    {
        for(int i=1;i<=num;i++)
            for(int j=1;j<=num;j++)
                scanf("%d",&a[i][j]);
        for(int i=1;i<=num;i++)
        {
            for(int j=1;j<=num;j++)
            {
                int temp;
                scanf("%d",&temp);
                a[i][j]=abs(a[i][j]-temp);
                if(a[i][j]==0) sum++;
            }
        }
        sum=sqrt(sum);
        cout<<donser(num,sum,0)<<endl;
    }
    return 0;
}

 

posted @ 2018-02-28 21:42  未名亚柳  阅读(396)  评论(0编辑  收藏  举报