• UVA 12284 Digital Matrix


    思路:这个分清楚情况就很好做了。

    注意一点当A的转置等于B的时候(对角线除外),记录A的下三角(或上三角)有cnt个的数与B不同,如果cnt>1则

    不需要额外的步数就可以了,否则当k==2时结果要加2,反之加1.

    代码如下:

     1 #include <cstdio>
     2 #include <iostream>
     3 #define M 105
     4 using namespace std;
     5 int a[M][M],b[M][M],n;
     6 bool is()
     7 {
     8     for(int i=0;i<n;i++)
     9         for(int j=0;j<i;j++)
    10             if(b[i][j]!=b[j][i]) return 0;
    11     return 1;
    12 }
    13 bool ab()
    14 {
    15     int cnt=0;
    16     for(int i=0;i<n;i++)
    17     for(int j=0;j<i;j++){
    18         if(a[i][j]!=b[j][i]||a[j][i]!=b[i][j]) return 0;
    19         if((a[i][j]!=b[i][j]||a[j][i]!=b[j][i])&&b[i][j]!=b[j][i]) cnt++;
    20     }
    21     if(cnt>1) return 0;
    22     return 1;
    23 }
    24 int main()
    25 {
    26     int t,ca=0,k;
    27     scanf("%d",&t);
    28     while(t--){
    29         scanf("%d%d",&n,&k);
    30         for(int i=0;i<n;i++)
    31             for(int j=0;j<n;j++)
    32             scanf("%d",&a[i][j]);
    33         int ans=0;
    34         for(int i=0;i<n;i++)
    35         for(int j=0;j<n;j++){
    36             scanf("%d",&b[i][j]);
    37             ans+=(a[i][j]!=b[i][j]);
    38         }
    39         printf("Case %d: ",++ca);
    40         if(!ans) printf("0
    ");
    41         else if(is()) printf("-1
    ");
    42         else if(ab()){
    43             if(k==2&&n==2) printf("-1
    ");
    44             else if(k==2) printf("%d
    ",ans+2);
    45             else printf("%d
    ",ans+1);
    46         }
    47         else printf("%d
    ",ans);
    48     }
    49 }
    View Code
  • 相关阅读:
    【Comet OJ Contest #15】孤独的吉姆 6
    【SSLOJ1467】U
    【SSLOJ1471】Y
    ajax调用webService
    泛型
    windows Server 2003 FTP
    ajax
    Linq 执行概念
    15款提高工作效率的工具分享
    Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3352444.html
Copyright © 2020-2023  润新知