题目分析:
Code:
#include <bits/stdc++.h>
using namespace std;
#define maxn 20
int ans[maxn][maxn],n,a[maxn][maxn],b[maxn][maxn],c[maxn][maxn];
char s[maxn];
inline void init_() {
freopen("a.txt","r",stdin);
}
inline void work_1_() {
for(int i=1;i<=n;++i) {
for(int j=n,pdc=1;j>=1;--j,++pdc) {
c[i][pdc]=a[j][i];
}
}
}
inline void work_2_() {
for(int i=n,pdc_1=1;i>=1;--i,++pdc_1) {
for(int j=n,pdc_2=1;j>=1;--j,++pdc_2) {
c[pdc_1][pdc_2]=a[i][j];
}
}
}
inline void work_3_() {
for(int i=n,pdc=1;i>=1;--i,++pdc) {
for(int j=1;j<=n;++j) {
c[pdc][j]=a[j][i];
}
}
}
inline void work_4_() {
if(n%2) {
for(int i=1;i<=n;++i) {
c[i][n/2+1]=a[i][n/2+1];
}
for(int i=n/2+2,pdc=n/2;i<=n;++i,--pdc) {
for(int j=1;j<=n;++j) {
c[j][pdc]=a[j][i];
}
}
for(int i=1,pdc=n;i<=n/2;++i,--pdc) {
for(int j=1;j<=n;++j) {
c[j][pdc]=a[j][i];
}
}
}
else {
for(int i=n/2+1,pdc=n/2;i<=n;++i,--pdc){
for(int j=1;j<=n;++j) {
c[j][pdc]=a[j][i];
}
}
for(int i=1,pdc=n;i<=n/2;++i,--pdc) {
for(int j=1;j<=n;++j) {
c[j][pdc]=a[j][i];
}
}
}
}
inline int pd_() {
for(int i=1;i<=n;++i) {
for(int j=1;j<=n;++j) {
if(c[i][j]!=b[i][j]) return 0;
}
}
return 1;
}
void readda_() {
scanf("%d",&n);
for(int i=1;i<=n;++i) {
scanf("%s",s);
for(int j=0;j<n;++j) {
if(s[j]=='@') {
a[i][j+1]=1;
}
else {
a[i][j+1]=0;
}
}
}
memcpy(ans,a,sizeof(ans));
for(int i=1;i<=n;++i) {
scanf("%s",s);
for(int j=0;j<n;++j) {
if(s[j]=='@') {
b[i][j+1]=1;
}
else {
b[i][j+1]=0;
}
}
}
work_1_();
if(pd_()) {
printf("1");
return;
}
work_2_();
if(pd_()) {
printf("2");
return;
}
work_3_();
if(pd_()) {
printf("3");
return;
}
work_4_();
if(pd_()) {
printf("4");
return;
}
work_4_();
memcpy(a,c,sizeof(a));
work_1_();
if(pd_()) {
printf("5");
return;
}
memcpy(a,ans,sizeof(a));
work_4_();
memcpy(a,c,sizeof(a));
work_2_();
if(pd_()) {
printf("5");
return;
}
memcpy(a,ans,sizeof(a));
work_4_();
memcpy(a,c,sizeof(a));
work_3_();
if(pd_()) {
printf("5");
return;
}
memcpy(a,ans,sizeof(a));
memcpy(c,ans,sizeof(c));
if(pd_()) {
printf("6");
return;
}
printf("7");
}
int main() {
init_();
readda_();
return 0;
}