Solution for 6789

· · 题解

对中心块特判,只有 8 才能符合题意。

    if(n%2 and m%2){
        if(a[(n+1)/2][(m+1)/2]==8){;}
        else{cout<<-1;return 0;}
    }

剩下就是从遍历数组,让 a_{i,j}a_{n-i+1,m-j+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;
}