博客
关于我
POJ 2260 Error Correction 模拟 贪心 简单题
阅读量:429 次
发布时间:2019-03-06

本文共 2135 字,大约阅读时间需要 7 分钟。

Error Correction
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 6825   Accepted: 4289

Description

A boolean matrix has the parity property when each row and each column has an even sum, i.e. contains an even number of bits which are set. Here's a 4 x 4 matrix which has the parity property:
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1

The sums of the rows are 2, 0, 4 and 2. The sums of the columns are 2, 2, 2 and 2.
Your job is to write a program that reads in a matrix and checks if it has the parity property. If not, your program should check if the parity property can be established by changing only one bit. If this is not possible either, the matrix should be classified as corrupt.

Input

The input will contain one or more test cases. The first line of each test case contains one integer n (n<100), representing the size of the matrix. On the next n lines, there will be n integers per line. No other integers than 0 and 1 will occur in the matrix. Input will be terminated by a value of 0 for n.

Output

For each matrix in the input file, print one line. If the matrix already has the parity property, print "OK". If the parity property can be established by changing one bit, print "Change bit (i,j)" where i is the row and j the column of the bit to be changed. Otherwise, print "Corrupt".

Sample Input

41 0 1 00 0 0 01 1 1 10 1 0 141 0 1 00 0 1 01 1 1 10 1 0 141 0 1 00 1 1 01 1 1 10 1 0 10

Sample Output

OKChange bit (2,3)Corrupt

计算每行每列1的数量,看奇数个的交叉点,大于一个或没有则不能实现。


#include<stdio.h>int main(){	int a[105][105];	int n;	while (~scanf("%d", &n))	{		int i, j;		int num1 = 0,num2=0;		if (!n)		{			break;		}		int x, y;		for ( i = 1; i <= n; i++)		{			int sum = 0;			for ( j = 1; j <= n; j++)			{				scanf("%d", &a[i][j]);				sum += a[i][j];			}			if (sum % 2 != 0)			{				x = i;				num1++;			}		}		for ( i = 1; i <= n; i++)		{			int sum = 0;			for ( j = 1; j<= n;j++)			{				sum += a[j][i];			}			if (sum % 2 != 0)			{				y = i;				num2++;			}		}				if (num1 == 0 && num2 == 0)		{			printf("OK\n");		}		else if (num1 == 1 && num2 == 1)		{			printf("Change bit (%d,%d)\n", x, y);		}		else		{			printf("Corrupt\n");		}	}	return 0;}


转载地址:http://gkwuz.baihongyu.com/

你可能感兴趣的文章
Openlayers实战:点击某点,overlay显示经纬度坐标
查看>>
Openlayers实战:界面控制综合演示
查看>>
Openlayers实战:绘制图形,导出geojson文件
查看>>
Openlayers实战:绘制图形,导出KML文件
查看>>
Openlayers实战:绘制多边形,导出CSV文件
查看>>
Openlayers实战:绘制带箭头的线
查看>>
Openlayers实战:绘制点、线、圆、多边形
查看>>
Openlayers实战:绘制矩形,正方形,正六边形
查看>>
Openlayers实战:自定义放大缩小,显示zoom等级
查看>>
Openlayers实战:自定义版权属性信息
查看>>
Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
查看>>
Openlayers实战:选择feature,列表滑动,定位到相应的列表位置
查看>>
Openlayers实战:非4326,3857的投影
查看>>
Openlayers高级交互(1/20): 控制功能综合展示(版权、坐标显示、放缩、比例尺、测量等)
查看>>
Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
查看>>
Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
查看>>
Openlayers高级交互(12/20):利用高德逆地理编码,点击位置,显示坐标和地址
查看>>
Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
查看>>
Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
查看>>
Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
查看>>