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++]
  • 相关阅读:
    Leetcode 650
    Leetcode 292
    Leetcode 162
    Leetcode 600
    Leetcode 1894
    知识库
    Win2012R2(英文版)开放远程用户登录数量限制的设置
    Win2012R2(英文版)多账号登录,报错:Select a user to disconnect so that you can sign in的处理
    webstorm修改默认浏览器方法
    处理Chrome等浏览器无法上网,但微信能正常使用问题
  • 原文地址:https://www.cnblogs.com/lzj-0218/p/3565851.html
Copyright © 2011-2022 走看看