题解:P14612 [2019 KAIST RUN Fall] 6789
如果旋转后的位置上的数字不是当前位置上的数字,那么就需要将这个数字单独旋转一下,需要旋转的数量
注意:如果旋转后的位置就是当前位置,那么这个位置只能是
还有一点,需要单独旋转的数字会被两个位置统计,所以如果统计的结果是
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ft first
#define sd second
#define fs(i,x,y) for(int i=(x);i<=(y);i++)
#define fj(i,x,y) for(int i=(x);i>=(y);i--)
int dc[]={0,7,0,0,0,0,9,1,8,6};
int n,m,a[505][505];
signed main(){
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c;
cin>>c;
a[i][j]=c-'0';
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(dc[a[i][j]]!=a[n-i+1][m-j+1]){
ans++;
if(a[i][j]!=a[n-i+1][m-j+1]){
cout<<-1;
return 0;
}
}
if(i==n-i+1&&j==m-j+1&&a[i][j]!=8){
cout<<-1;
return 0;
}
}
}
cout<<ans/2;
return 0;
}