ZlycerQan的 八云蓝(ran )

来源:互联网 发布:买黄金软件下载 编辑:程序博客网 时间:2024/06/08 05:20

八云蓝(ran )

【题目背景】
“哎呀哎呀~幽幽子送我的那个古瓷器。。。怎么成了碎片啊”
八云蓝捂住头趴在地上,身边的八云紫正拿着她那把洋伞,砰砰地敲着蓝的
头。
“说过多少次了,管好你那大尾巴!”
“呜呜呜。。。我不敢了。”
“记得 300 年前那次。。你好像也是这么说的吧?”
“呜呜呜。。“
“这是我对你‘爱的形式’啊,你可要好好接受!快起来,教橙数学去!”
【问题描述】
无奈的八云蓝只得从地上爬起来,到了橙的身边,这次橙的题目不在是一道
数学题了,而是一道非常奇怪的题。
具体的, 有两个 n n* 的正方形矩阵,
j i
a 表示第 1 个矩阵第 i 行第 j 列的数,
j i
b
表示第 2 个矩阵第 i 行第 j 列的数,你需要求出两个矩阵中完全相同的两个最大
子正方形的边长(相同是指长宽相同且每个位置的数均相等)。
【输入格式】
第一行一个正整数 n 。
接下来 n 行,每行 n 个数,为第一个矩阵。
接下来 n 行,每行 n 个数,为第二个矩阵。
【输出格式】
一行一个整数,表示最大子矩阵的边长。
【样例 1 1 输入】
3
1 2 4
4 5 6
9 9 8
7 4 3
2 1 2
2 4 5
【样例 1 1 输出】
这里写图片描述

#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define MAXN 51int a[MAXN][MAXN],b[MAXN][MAXN];inline void read(int &x){    x=0; int f=1; char c=getchar();    while(c>'9'||c<'0'){ if(c=='-')f=-1; c=getchar(); }    while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } x*=f;}inline bool Judge(int len,int x,int y,int p,int q){    for(int w=0;w<len;++w)        for(int c=0;c<len;++c)            if(a[x+w][y+c]!=b[p+w][q+c]) return false;    return true;}int Main(){    freopen("ran.in","r",stdin);    freopen("ran.out","w",stdout);    int n; read(n);    register int i,j;    for(i=1;i<=n;++i) for(j=1;j<=n;++j) read(a[i][j]);    for(i=1;i<=n;++i) for(j=1;j<=n;++j) read(b[i][j]);    for(i=n;i>=1;i--)        for(j=1;j<=n-i+1;++j)            for(int k=1;k<=n-i+1;++k)//                for(int l=1;l<=n-i+1;++l)                    for(int h=1;h<=n-i+1;++h){                        bool flag=true;                        flag=Judge(i,j,k,l,h);                        if(flag==true){                            printf("%d\n",i);                            return 0;                        }                    }    printf("0\n");    return 0;}int Aptal_is_My_Son=Main();int main(int argc,char *argv[]){ ; }

N^7暴力,可以AC,就是要注意枚举一个边长,边长从大到小枚举,一旦有验证通过的直接return 0

泽勒钱说题目忘记从哪里搬得了。。