Solution for 6789
对中心块特判,只有 8 才能符合题意。
if(n%2 and m%2){
if(a[(n+1)/2][(m+1)/2]==8){;}
else{cout<<-1;return 0;}
}
剩下就是从遍历数组,让
- 6 和 9 进行配对,若配对成功且数字相同,则答案加一。
- 7 与 7 进行配对,若配对成功,则答案加一。
- 8 与 8 进行配对,若配对成功,则答案不变。
- 否则配对失败,输出 -1。
AC Code
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[505][505];
int main(){
int ans=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';
}
}
if(n%2 and m%2){
if(a[(n+1)/2][(m+1)/2]==8){;}
else{cout<<-1;return 0;}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==7){
if(a[n-i+1][m-j+1]==7) ans++;
else{cout<<-1;return 0;}
}
else if(a[i][j]==6){
if(a[n-i+1][m-j+1]==6) ans++;
else if(a[n-i+1][m-j+1]==9) ;
else{cout<<-1;return 0;}
}
else if(a[i][j]==9){
if(a[n-i+1][m-j+1]==6) ;
else if(a[n-i+1][m-j+1]==9) ans++;
else{cout<<-1;return 0;}
}
else if(a[i][j]==8){
if(a[n-i+1][m-j+1]==8);
else{cout<<-1;return 0;}
}
}
}
cout<<ans/2;
return 0;
}