百练/ 北京大学2016研究生推免上机考试(校内)C: 错误探测

题目来源:http://noi.openjudge.cn/ch0108/04/

04:错误探测

总时间限制1000ms  内存限制65536kB

描述

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

输入

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

输出

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

样例输入

样例输入1
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1

样例输入2
4
1 0 1 0
0 0 1 0
1 1 1 1
0 1 0 1

样例输入3
4
1 0 1 0
0 1 1 0
1 1 1 1
0 1 0 1

样例输出

样例输出1
OK

样例输出2
2 3

样例输出3
Corrupt

-----------------------------------------------------

解题思路

计算每行每列1的个数,如果只有一行一列1的个数是奇数,则改变这行这列的元素(从1到0/从0到1)

-----------------------------------------------------

代码

 

//C:错误探测
//总时间限制: 1000ms 内存限制: 65536kB
//描述
//给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。 
//你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。 
//"改变矩阵元素"的操作定义为0变成1或者1变成0。
//
//输入
//输入n + 1行,第1行为矩阵的大小n(0 < n < 100),以下n行为矩阵的每一行的元素,元素之间以一个空格分开。
//输出
//如果矩阵符合条件,则输出OK;
//如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号,以一个空格分开。
//如果不符合以上两条,输出Corrupt。
//样例输入
//样例输入1
//4
//1 0 1 0
//0 0 0 0
//1 1 1 1
//0 1 0 1
//
//样例输入2
//4
//1 0 1 0
//0 0 1 0
//1 1 1 1
//0 1 0 1
//
//样例输入3
//4
//1 0 1 0
//0 1 1 0
//1 1 1 1
//0 1 0 1
//样例输出
//样例输出1
//OK
//
//样例输出2
//2 3
//
//样例输出3
//Corrupt

#include<fstream>
#include<iostream>
using namespace std;

const int MAX = 101;

bool map[MAX][MAX];

int main()
{
#ifndef ONLINE_JUDGE
	ifstream fin("tm201601C.txt");
	int n,i,j;
	fin >> n;
	for (i=0; i<n; i++)
	{
		for (j=0; j<n; j++)
		{
			fin >> map[i][j];
		}
	}
	fin.close();
	int line = 0, col = 0, lcnt = 0, ccnt = 0, theline, thecol;
	for (i=0; i<n; i++)
	{
		line = 0;
		for (j=0; j<n; j++)
		{
			if (map[i][j])
			{
				line++;
			}
		}
		if (line%2==1)
		{
			theline = i;
			lcnt++;
		}
	}
	for (i=0; i<n; i++)
	{
		col = 0;
		for (j=0; j<n; j++)
		{
			if (map[j][i])
			{
				col++;
			}
		}
		if (col%2==1)
		{
			thecol = i;
			ccnt++;
		}
	}
	if (lcnt==0 && ccnt==0)
	{
		cout << "OK";
	}
	else if (lcnt==1 && ccnt == 1)
	{
		cout << theline+1 << " " << thecol+1;
	}
	else
	{
		cout << "Corrupt";
	}
	return 0;
#endif
#ifdef ONLINE_JUDGE
	int n,i,j;
	cin >> n;
	for (i=0; i<n; i++)
	{
		for (j=0; j<n; j++)
		{
			cin >> map[i][j];
		}
	}
	int line = 0, col = 0, lcnt = 0, ccnt = 0, theline, thecol;
	for (i=0; i<n; i++)
	{
		line = 0;
		for (j=0; j<n; j++)
		{
			if (map[i][j])
			{
				line++;
			}
		}
		if (line%2==1)
		{
			theline = i;
			lcnt++;
		}
	}
	for (i=0; i<n; i++)
	{
		col = 0;
		for (j=0; j<n; j++)
		{
			if (map[j][i])
			{
				col++;
			}
		}
		if (col%2==1)
		{
			thecol = i;
			ccnt++;
		}
	}
	if (lcnt==0 && ccnt==0)
	{
		cout << "OK";
	}
	else if (lcnt==1 && ccnt == 1)
	{
		cout << theline+1 << " " << thecol+1;
	}
	else
	{
		cout << "Corrupt";
	}
	return 0;
#endif

}

猜你喜欢

转载自blog.csdn.net/da_kao_la/article/details/80307177
今日推荐