题目描述

有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格。每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗)。我们可以通过若干操作使魔板从一个状态改变为另一个状态。操作的方式有两种:
  (1)任选一行,改变该行中所有灯泡的状态,即亮的变暗、暗的变亮;
  (2)任选两列,交换其位置。
  当然并不是任意的两种状态都可以通过若干操作来实现互相转化的。
  你的任务就是根据给定两个魔板状态,判断两个状态能否互相转化。

输入格式

文件中包含多组数据。第一行一个整数k,表示有k组数据。
  每组数据的第一行两个整数n和m。(0<n,m≤100)
  以下的n行描述第一个魔板。每行有m个数字(0或1),中间用空格分隔。若第x行的第y个数字为0,则表示魔板的第x行y列的灯泡为“亮”;否则为“暗”。
  然后的n行描述第二个魔板。数据格式同上。
  任意两组数据间没有空行。

输出格式

共k行,依次描述每一组数据的结果。
  若两个魔板可以相互转化,则输出YES,否则输出NO。(注意:请使用大写字母)

输入输出样例

输入
  2
  3 4
  0 1 0 1
  1 0 0 1
  0 0 0 0
  0 1 0 1
  1 1 0 0
  0 0 0 0
  2 2
  0 0
  0 1
  1 1
  1 1

输出

YES

NO

分析

一直以为是个结论题没想到居然是个暴力枚举的。。。。。。

先来手玩一下就可以发现(并不,所以每行最多只有可能变换一次,不然就换回来了。

所以每一行就会有两种情况,变和不变

然后yyq暴力2^n枚举每行的变化情况加剪枝大力出奇迹过了这个题

其实除了2^n枚举之外,还有一种枚举方法

对于每一列来说,列的变换不会改变数字

先假设能成功

那么如果我们知道第1个矩阵中的某一列经过变换后成为第2个矩阵的某一列,

那我们就可以通过比较两个列哪些数字不同,推出哪些行是变换了的

所以我们直接去枚举第1个矩阵中的第一列经过变换后成为第2个矩阵的第i列

然后推出哪些行是变换了,进而n^3判断剩下的列是否可行。

如果全都不行则无解

复杂度是O(kn^4),开开O2应该可以过

我不信你100张牌能秒我???(雾

代码

#include<cstdio>
#include<cstring>
int T,n,m,rev[],vis[],nw[][],nx[][];
bool check(int x)
{
memset(vis,,sizeof vis);vis[x]=;
for(int j=;j<=m;j++)
{
int flag=;
for(int k=;k<=m;k++)if(!vis[k])
{
flag=;
for(int i=;i<=n;i++)flag&=(nw[i][j]==(rev[i]^nx[i][k]));
if(flag){vis[k]=;break;}
}
if(!flag)return ;
}
return ;
}
int main()
{
for(scanf("%d",&T);T;T--)
{
scanf("%d%d",&n,&m);int flag=;
for(int i=;i<=n;i++)for(int j=;j<=m;j++)scanf("%d",&nw[i][j]);
for(int i=;i<=n;i++)for(int j=;j<=m;j++)scanf("%d",&nx[i][j]);
for(int i=;i<=m&&!flag;i++)
{
memset(rev,,sizeof rev);
for(int j=;j<=n;j++)rev[j]=(nw[j][]!=nx[j][i]);
flag=check(i);
}
if(flag)puts("YES");else puts("NO");
}
}

【洛谷】P1275 魔板(暴力&思维)的更多相关文章

  1. 洛谷P1275 魔板

    P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...

  2. 洛谷 P1275 魔板

    P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...

  3. [洛谷P2730] 魔板 Magic Squares

    洛谷题目链接:魔板 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都 ...

  4. 洛谷P2730 魔板 [广搜,字符串,STL]

    题目传送门 魔板 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有 ...

  5. 洛谷 P2730 魔板 Magic Squares 解题报告

    P2730 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 ...

  6. 洛谷 P2730 魔板 Magic Squares

    P2730 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 ...

  7. 洛谷 - P2730 - 魔板 Magic Squares - bfs

    写状态转移弄了很久,老了,不记得自己的数组是怎么标号的了. #include <bits/stdc++.h> using namespace std; #define ll long lo ...

  8. 【题解】魔板—洛谷P1275。

    话说好久没更博了. 最近学了好多知识懒的加进来了. 有幸认识一位大佬. 让我有了继续更博的兴趣. 但这是一个旧的题解. 我在某谷上早就发过的. 拿过来直接用就当回归了吧. 其实这道题有一个特别关键的思 ...

  9. P1275 魔板

    题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状态.操作的方式有两 ...

随机推荐

  1. Linux下使用nextcloud搭建个人网盘

    市面上有那么多的网盘服务提供商,为什么还要自己搭建网盘呢?主要有以下原因: 免费的网盘都有种种限制,要么不限速容量小(onedriver,google driver),要么容量大限速(百度云) 付费网 ...

  2. [React] 函数定义组件

    函数定义组件的例子 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } 该函数是一个有效的 Rea ...

  3. SSRF绕过IP限制方法总结

    SSRF绕过IP限制方法总结 - Summary of SSRF methods for bypassing IP restrictions -https://www.cnblogs.com/iAmS ...

  4. Python学习笔记【1】

    1.%r和%s的区别 (1)stackflow 上面的一个解答 (2) x = "There are %d types of people." %10 binary = " ...

  5. oracle批量操作

    https://stackoverflow.com/questions/39576/best-way-to-do-multi-row-insert-in-oracle 1 批量insert 方式一: ...

  6. out string

    示例 当希望方法返回多个值时,声明 out 方法很有用.使用 out 参数的方法仍然可以将变量用作返回类型(请参见 return),但它还可以将一个或多个对象作为 out 参数返回给调用方法.此示例使 ...

  7. Python日记(二):Python之禅

    The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Si ...

  8. 系统调用IO和标准IO

    目录 1. 系统调用IO(无缓冲IO) 系统调用 常用系统调用IO函数 open close read write lseek ioctl 2. 标准IO(带缓冲IO) 概述 缓冲与冲洗 常用标准IO ...

  9. ISCC之web2

    Php代码审计 PHP代码 <?php error_reporting(0); require 'flag.php'; $value = $_GET['value']; $password = ...

  10. IDEA实用教程(十一)—— 使用Maven创建JavaSE项目

    第一步 第二步 在IDEA中,我们常用三种骨架 org.apache.maven.archetypes:maven-archetype-quickstart : 打包方式为jar org.apache ...