1804:错误探测

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值