这道题虽然一次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个数都为奇数;而只有行和列的其中之一为奇数是不行的,改元素势必会影响到其他的偶数。