uva 12284 直接判断

思路:见代码

#include<iostream>

#include<cstring>

#include<cstdio>

#include<algorithm>

#define Maxn 110

using namespace std;

int a[Maxn][Maxn],b[Maxn][Maxn],n,k;

bool equel()

{

    int i,j;

    for(i=1;i<=n;i++){

        for(j=1;j<=n;j++){

            if(a[i][j]!=b[i][j])

                return false;

        }

    }

    return true;

}

bool symmic()

{

    int i,j,cnt=0;

    for(i=1;i<=n;i++){

        for(j=1;j<i;j++){

            if(a[i][j]!=b[j][i]&&i!=j)

                return false;

            if((a[i][j]!=b[i][j]||a[j][i]!=b[j][i])&&b[j][i]!=b[i][j]){

                    cnt++;

            }

        }

    }

    if(cnt>1) return false;

    return true;

}

bool bb()

{

    int i,j;

    for(i=1;i<=n;i++){

        for(j=1;j<=n;j++){

            if(b[i][j]!=b[j][i])

                return false;

        }

    }

    return true;

}

bool aa()

{

    int i,j;

    for(i=1;i<=n;i++){

        for(j=1;j<=n;j++){

            if(a[i][j]!=a[j][i])

                return false;

        }

    }

    return true;

}

int getnum()

{

    int i,j,num=0;

    for(i=1;i<=n;i++){

        for(j=1;j<=n;j++){

            if(a[i][j]!=b[i][j])

                num++;

        }

    }

    return num;

}

int main()

{

    int t,i,j,Ca=0;

    scanf("%d",&t);

    while(t--){

        scanf("%d%d",&n,&k);

        for(i=1;i<=n;i++){

            for(j=1;j<=n;j++)

                scanf("%d",&a[i][j]);

        }

        for(i=1;i<=n;i++){

            for(j=1;j<=n;j++)

                scanf("%d",&b[i][j]);

        }

        printf("Case %d: ",++Ca);

        if(equel()){

            printf("0\n");

            continue;

        }

        if(bb()){

            printf("-1\n");

            continue;

        }

        int ans;

        ans=getnum();

        if(symmic()){

            if(k<=2&&n<=2){

                printf("-1\n");

                continue;

            }

            if(k==2)

            printf("%d\n",ans+2);

            else

                printf("%d\n",ans+1);

            continue;

        }

        printf("%d\n",ans);

    }

    return 0;

}

 

你可能感兴趣的:(uva)