40分,求大神修改
查看原帖
40分,求大神修改
1121438
huangxinyou楼主2023/12/25 21:13

思路: 暴力枚举,循环,用x记录a数组右下角的部分,check函数负责检验,取最大值。``` #include<bits/stdc++.h>
using namespace std;
#define FO(i,a,b) for(int i=a;i<=b;i++)
int an,am,bn,bm,a[55][55],b[55][55],ans,x[55][55];
void solve(int ai,int aj){
FO(i,ai,an)FO(j,aj,am)x[i-ai+1][j-aj+1]=a[i][j];} bool check(int n,int m){ FO(i,1,n)FO(j,1,m)if(x[i][j]!=b[i][j])return 0; return 1;} void solve(int ai,int aj,int bi,int bj){ if(an-ai+1!=bi||am-aj+1!=bj)return; solve(ai,aj); if(check(bi,bj))ans=max(ans,bi*bj); } signed main(){ cin>>an>>am; FO(i,1,an)FO(j,1,am)cin>>a[i][j]; cin>>bn>>bm; FO(i,1,bn)FO(j,1,bm)cin>>b[i][j]; FO(ai,1,an)FO(aj,1,am)FO(bi,1,bn)FO(bj,1,bm)solve(ai,aj,bi,bj); cout<<ans; return 0; }

2023/12/25 21:13
加载中...