code#5 P3 我有矩阵,你有吗?
Posted ztz11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了code#5 P3 我有矩阵,你有吗?相关的知识,希望对你有一定的参考价值。
我有矩阵,你有吗?
时间限制: 1.0 秒
空间限制: 128 MB
相关文件: 题目目录
题目描述
企鹅豆豆手里有两个 01 矩阵 A 和 B。他可以进行两种操作:
- 选择 A 矩阵的一行,然后把这一行的 0 变成 1,把 1 变成 0。
- 选择 A 矩阵的一列,然后把这一列的 0 变成 1,把 1 变成 0。
现在他想知道能不能把 A 矩阵通过以上操作变成 B 矩阵。保证 A 矩阵和 B 矩阵的大小一致。
输入格式
从标准输入读入数据。
每个测试点只有一组数据。
输入的第一行包含两个正整数 n 和 m,表示 A 矩阵的行数,保证 n≤103,m≤103。 接下来 n 行,每行 m 个由空格隔开的整数,表示矩阵 A。保证矩阵中只有 0 或者 1。 接下来 n 行,每行 m 个由空格隔开的整数,表示矩阵 B。保证矩阵中只有 0 或者 1。
输出格式
输出到标准输出。
如果矩阵 A 通过以上两种操作可以变成矩阵 B,输出 Koyi
,否则输出 Budexing
。
思路:
在做这道题之前,建议大家先看一下
[SCOI2005]扫雷
这两道题在思路上有着相似之处
我们可以将01矩阵转化一下,生成一个新的矩阵
如果两个矩阵在该位置相同,那么新矩阵这个位置的值为1
否则为0
我们分别假定第一个位置被修改过,没有被修改过
分别跑一次
因为要求合法,所以当第一行状态被确定时,后面的状态就全部被确定了
暴力n*m地扫就行
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<bitset> #include<queue> #include<cstdlib> #include<algorithm> #define rii register int i #define rij register int j using namespace std; int ys[1005][1005],mb[1005][1005],now[1005][1005],cs[1005][1005]; int m,n; inline bool cs1() { for(rii=1;i<=m;i++) { if(now[1][i]==1) { for(rij=1;j<=n;j++) { now[j][i]=(now[j][i]+1)%2; } } } for(rii=2;i<=n;i++) { int pd=now[i][1]; for(rij=2;j<=m;j++) { if(now[i][j]!=pd) { return false; } } } return true; } inline bool cs2() { for(rii=1;i<=m;i++) { if(now[1][i]==0) { for(rij=1;j<=n;j++) { now[j][i]=(now[j][i]+1)%2; } } } for(rii=2;i<=n;i++) { int pd=now[i][1]; for(rij=2;j<=m;j++) { if(now[i][j]!=pd) { return false; } } } return true; } int main() { // freopen("2.in","r",stdin); scanf("%d%d",&n,&m); for(rii=1;i<=n;i++) { for(rij=1;j<=m;j++) { scanf("%d",&ys[i][j]); } } for(rii=1;i<=n;i++) { for(rij=1;j<=m;j++) { scanf("%d",&mb[i][j]); } } for(rii=1;i<=n;i++) { for(rij=1;j<=m;j++) { if(ys[i][j]!=mb[i][j]) { now[i][j]=1; cs[i][j]=1; } } } if(cs1()==true) { puts("Koyi"); return 0; } if(cs2()==true) { puts("Koyi"); return 0; } puts("Budexing"); return 0; }
以上是关于code#5 P3 我有矩阵,你有吗?的主要内容,如果未能解决你的问题,请参考以下文章