题意:给两个n*n矩阵,可以旋转,判断最多有多少组对应元素相等。
思路:对每个方向统计一次,得到最大值。
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <string.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <ctype.h>
#include <sstream>
#define INF 1000000000
#define ll long long
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
using namespace std;
int mp[33][33];
int mp2[33][33];
int main(){
int n;
while(cin>>n){
if(!n)break;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&mp[i][j]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&mp2[i][j]);
}
}
int ans=0;
int tmp=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mp[i][j]==mp2[i][j])tmp++;
}
}
ans=max(ans,tmp);
//
tmp=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mp[i][j]==mp2[j][n-i+1])tmp++;
}
}
ans=max(ans,tmp);
//
tmp=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mp[i][j]==mp2[n-i+1][n-j+1])tmp++;
}
}
ans=max(ans,tmp);
//
tmp=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mp[i][j]==mp2[n-j+1][i])tmp++;
}
}
ans=max(ans,tmp);
cout<<ans<<endl;
}
return 0;
}