40分求捞
查看原帖
40分求捞
695025
cokkie楼主2023/8/15 23:46
#include<bits/stdc++.h>
using namespace std;
int n,m,r,c,ans=0;
bool g1[51][51],g2[51][51]; 
int main(){
	cin >> n >> m;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin >> g1[i][j];
	cin >> r >> c;
	for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) cin >> g2[i][j];
	for(int i=1;i<=n;i++){//向右下方遍历 
		for(int j=1;j<=m;j++){
			int pans=0;
			bool flag=1;
			for(int k=1;k<=r;k++){
				if(i+k-1>n) break;
				for(int p=1;p<=c;p++){
					if(j+p-1>m) break;
					if(g1[i+k-1][j+p-1]==g2[k][p]) pans++;
					else{
						flag=0;
						break;
					}
					if(!flag) break;
				}
			}
			if(flag) ans=max(ans,pans);
		}
	}
	for(int i=1;i<=n;i++){//向右上方遍历 
		for(int j=1;j<=m;j++){
			int pans=0;
			bool flag=1;
			for(int k=1;k<=r;k++){
				if(i+k-1>n) break;
				for(int p=1;p<=c-n+j;p++){
					if(j+p-1>m) break;
					if(g1[k][j+p]==g2[c-j+1+k][p]) pans++;
					else{
						flag=0;
						break;
					}
					if(!flag) break;
				}
			}
			if(flag) ans=max(ans,pans);
		}
	}
	for(int i=1;i<=n;i++){//向左下方遍历 
		for(int j=1;j<=m;j++){
			int pans=0;
			bool flag=1;
			for(int k=1;k<=r;k++){
				if(i+k-1>n) break;
				for(int p=1;p<=c;p++){
					if(j+p-1>m) break;
					if(g1[i+k-1][j+p-1]==g2[k][p]) pans++;
					else{
						flag=0;
						break;
					}
					if(!flag) break;
				}
			}
			if(flag) ans=max(ans,pans);
		}
	}
	for(int i=1;i<=n;i++){//向左上方遍历 
		for(int j=1;j<=m;j++){
			int pans=0;
			bool flag=1;
			for(int k=1;k<=r;k++){
				if(i+k-1>n) break;
				for(int p=1;p<=c;p++){
					if(j+p-1>m) break;
					if(g1[i+k-1][j+p-1]==g2[k][p]) pans++;
					else{
						flag=0;
						break;
					}
					if(!flag) break;
				}
			}
			if(flag) ans=max(ans,pans);
		}
	}
	cout << ans;
	return 0;
}
2023/8/15 23:46
加载中...