版权声明:反正也没有人会转,下一个 https://blog.csdn.net/drtlstf/article/details/84885704
Description
给定 n * n由 0和 1组成的矩阵,如果矩阵的每一行和每一列的 1的数量都是偶数,则认为符合条件你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件 ”改变矩阵元素”的操作定义为 0变成 1或者 1变成 0 。
Input
输入 n +1行,第 1行为矩阵的大小 n,以下 n行为矩阵的每一行的元素,元素之间以一个空格分开。
Output
如果矩阵符合条件,则输出 OK;如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号,以一个空格分开。如果不符合以上两条,输出 Corrupt。
HINT
对于20% 的数据,1 <= n <=10。
• 对于60% 的数据,1 <=n <=50。
• 对于100% 的数据,1 <= n <=100。
Source/Category
卡常!卡常!卡常!
计算机最不怕的就是卡常。你让它卡1500000000次都不怕,但是让它卡15000000000000000次的话......
#include <iostream>
#include <cstdio>
#define SIZE 110
using namespace std;
int r[SIZE], c[SIZE];
int main(void)
{
int n, i, j, x, indexx = 0, indexy = 0;
scanf("%d", &n);
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= n; ++j)
{
scanf("%d", &x);
if (x)
{
r[i] ^= 1; // 异或卡常
c[j] ^= 1;
}
}
}
for (i = 1; i <= n; ++i) // 探测!是否存在错误?
{
if (r[i]) // 什么?这行不行?错误行数是否被记录过?
{
if (indexx) // 什么?被记录过?
{
printf("Corrupt"); // 一次改变不了!
return 0;
}
indexx = i; // 记录错误行
}
if (c[i]) // 什么>这列不行?错误列数是否被记录?
{
if (indexy) // 什么?被记录过?
{
printf("Corrupt"); // 一次改变不了!
return 0;
}
indexy = i; // 记录错误列
}
}
if ((indexx) || (indexy)) // 有错误!
{
printf("%d %d", indexx, indexy); // 输出要改变的
}
else // 什么?没问题?
{
printf("OK"); // OK!全部正确!
}
return 0;
}