zoukankan      html  css  js  c++  java
  • UVa 541 Error Correction

      Error Correction 

    A boolean matrix has the parity property when each row and each column has an even sum, i.e. contains an even number of bits which are set. Here's a 4 x 4 matrix which has the parity property:

    1 0 1 0
    0 0 0 0
    1 1 1 1
    0 1 0 1
    

    The sums of the rows are 2, 0, 4 and 2. The sums of the columns are 2, 2, 2 and 2.


    Your job is to write a program that reads in a matrix and checks if it has the parity property. If not, your program should check if the parity property can be established by changing only one bit. If this is not possible either, the matrix should be classified as corrupt.

    Input 

    The input file will contain one or more test cases. The first line of each test case contains one integer n(n<100), representing the size of the matrix. On the next n lines, there will be n integers per line. No other integers than 0 and 1 will occur in the matrix. Input will be terminated by a value of 0 for n.

    Output 

    For each matrix in the input file, print one line. If the matrix already has the parity property, print ``OK". If the parity property can be established by changing one bit, print ``Change bit (i,j)" where i is the row and j the column of the bit to be changed. Otherwise, print ``Corrupt".

    Sample Input 

    4
    1 0 1 0
    0 0 0 0
    1 1 1 1
    0 1 0 1
    4
    1 0 1 0
    0 0 1 0
    1 1 1 1
    0 1 0 1
    4
    1 0 1 0
    0 1 1 0
    1 1 1 1
    0 1 0 1
    0
    

    Sample Output 

    OK
    Change bit (2,3)
    Corrupt
    

    Miguel A. Revilla 
    1999-01-11

    给一个n*n矩阵,判断它是否具有题目中规定的parity property特征,如果不具有,是否可以通过只改变1位来使它具有parity property特征。

    做法就是对矩阵的每行和每列求和,如果每行的和、每列的和都是偶数,则具有parity property特征;如果每行的和、每列的和中各有一个奇数,则可以通过改变一位使它具有partity property特征,改变的位的坐标就是这两个奇数所在的行坐标和列坐标;如果每行的和中奇数的个数大于2,或每列的和中奇数的个数大于2,则它是Corrupt的。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 int n;
     8 int sum_c[200],sum_r[200];
     9 int m[200][200];
    10 
    11 int main()
    12 {
    13     while(scanf("%d",&n)==1&&n)
    14     {
    15         memset(m,0,sizeof(m));
    16         memset(sum_c,0,sizeof(sum_c));
    17         memset(sum_r,0,sizeof(sum_r));
    18 
    19         for(int i=0;i<n;i++)
    20             for(int j=0;j<n;j++)
    21                 scanf("%d",&m[i][j]);
    22 
    23         for(int i=0;i<n;i++)
    24             for(int j=0;j<n;j++)
    25                 sum_r[i]+=m[i][j];
    26 
    27         for(int j=0;j<n;j++)
    28             for(int i=0;i<n;i++)
    29                 sum_c[j]+=m[i][j];
    30 
    31         int r=0,c=0,pos_r,pos_c;
    32         for(int i=0;i<n;i++)
    33         {
    34             if(sum_r[i]%2==1)
    35             {
    36                 pos_r=i+1;
    37                 r++;
    38             }
    39             if(sum_c[i]%2==1)
    40             {
    41                 pos_c=i+1;
    42                 c++;
    43             }
    44         }
    45 
    46         if(r>1||c>1)
    47             puts("Corrupt");
    48         else if(r==0&&c==0)
    49             puts("OK");
    50         else
    51             printf("Change bit (%d,%d)
    ",pos_r,pos_c);
    52     }
    53 
    54     return 0;
    55 }
    [C++]
  • 相关阅读:
    记录@DeleteMapping注解的使用
    记录一次linux设置frp开机自启动功能实现
    mongo对用户简单操作
    Jedis分布式锁实际应用笔记
    如何在R语言中建立六边形矩阵热图heatmap可视化
    R语言复杂网络分析:聚类(社区检测)和可视化
    R语言泊松Poisson回归模型预测人口死亡率和期望寿命
    R语言混合正态分布极大似然估计和EM算法
    R语言使用自组织映射神经网络(SOM)进行客户细分
    R语言时间序列TAR阈值自回归模型
  • 原文地址:https://www.cnblogs.com/lzj-0218/p/3565851.html
Copyright © 2011-2022 走看看