1804:错误探测

发布时间 2023-12-10 11:14:45作者: Qwehhh

原题

这道题虽然一次ac了,而且写的很顺,没调就过了,所以记录一下想法撒

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int s[101][101] = {};
    int x[101],y[101];
    int n,flag = 0,x1,sumx = 0,y1,sumy = 0;
    memset(x,0,sizeof(x));
    memset(y,0,sizeof(y));
    scanf("%d",&n);
    for(int i = 1;i <= n;++ i){
        for(int j = 1;j <= n;++ j){
            scanf("%d",&s[i][j]);
        }
    }
    for(int i = 1;i <= n;++ i){
        for(int j = 1;j <= n;++ j){
            x[i] += s[i][j];
            y[j] += s[i][j];
        }
    }
    for(int i = 1;i <= n;++ i){
        if(x[i] % 2 != 0){
            flag = 1;
            ++ sumx;
            if(sumx == 1){
                x1 = i;
            }
        }
    }
    for(int i = 1;i <= n;++ i){
        if(y[i] % 2 != 0){
            flag = 1;
            ++ sumy;
            if(sumy == 1){
                y1 = i;
            }
        }
    }
    if(flag == 0){
        printf("OK");
    }
    else if(sumx == 1 && sumy == 1){
        printf("%d %d",x1,y1);
    }
    else{
        printf("Corrupt");
    }
    return 0;
}

这里拿了两个数组,一个x一个y来储存矩阵每一行每一列的奇偶情况
对于题意要想明白一件事情,所谓能只改一个元素就能正确就是此元素所在的行和列的1个数都为奇数;而只有行和列的其中之一为奇数是不行的,改元素势必会影响到其他的偶数。