zoukankan      html  css  js  c++  java
  • openjudge 错误探测

    描述

    给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。 
    你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。 
    "改变矩阵元素"的操作定义为0变成1或者1变成0。

    输入

      输入n + 1行,第1行为矩阵的大小n(0 < n < 100),以下n行为矩阵的每一行的元素,元素之间以一个空格分开。

    输出

      如果矩阵符合条件,则输出OK;
      如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号,以一个空格分开。
      如果不符合以上两条,输出Corrupt。

    题其实不难,可以想到直接先算出每行每列的1的个遇到一点数,在判断就可以了。但会遇到一点问题,如何判断改变一个就可以使其符合要求。可想而知,如果有两列或两行都是不合格的那么一定不可能通过改变一个合格,所以要改变一个使其合格,必须找出另一列或者行也是不合格的才行,不然改变后必然让另一个不合格。而且,改变的点的坐标就是这列和这排(这样才可以影响两个嘛!);记录下来最后输出。如果判断出超过两行不合格直接break然后输出就好了。

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cmath>
     4 using namespace std;
     5 int mp[109][109];//矩阵 
     6 int n; //矩阵行列个数 
     7 int x,y;//改变的坐标 
     8 int ans;//记录有几个不合格 
     9 int main(){
    10     cin>>n;
    11     for(int i=1;i<=n;i++){
    12         for(int j=1;j<=n;j++){
    13             cin>>mp[i][j];
    14         }
    15     }
    16     //读入 
    17     for(int i=1;i<=n;i++){
    18         int num=0;
    19         for(int j=1;j<=n;j++){
    20             if(mp[i][j]==1) num++;
    21         }
    22         mp[i][0]=num;
    23     }
    24     for(int i=1;i<=n;i++){
    25         int num=0;
    26         for(int j=1;j<=n;j++){
    27             if(mp[j][i]==1) num++;
    28         }
    29         mp[0][i]=num;
    30     }
    31     //将每行每列“1”的个数求出 
    32     for(int i=0;i<=n;i++){
    33         if(mp[0][i]%2!=0){
    34             ans++;
    35             if(ans>=2){
    36                 cout<<"Corrupt";
    37                 break;
    38             }
    39             for(int j=0;j<=n;j++){
    40                 if(mp[j][0]%2!=0){
    41                     x=j;
    42                     y=i;
    43                 }
    44             }
    45             if(ans==1&&x==0&&y==0){
    46                 cout<<"Corrupt";
    47                 break;
    48             }
    49         } 
    50     }
    51     //判断合格 
    52     if(ans==0){
    53         cout<<"OK";
    54     }
    55     if(ans==1&&x!=0&&y!=0){
    56         cout<<x<<" "<<y;
    57     }
    58 } 

  • 相关阅读:
    UnxUtils让windows下的dos命令变为linux下的命令
    Python多线程&进程
    Web前端工程师-优秀简历汇总
    最详细的Vuex教程
    Vue2.0 探索之路——生命周期和钩子函数的一些理解
    理解 $nextTick 的作用
    使用git rebase合并多次commit
    vim 退出命令(保存、放弃保存)
    Vue获取DOM元素样式 && 样式更改
    Vue Router的配置
  • 原文地址:https://www.cnblogs.com/1129-tangqiyuan/p/9343914.html
Copyright © 2011-2022 走看看