【洛谷】P1275 魔板(暴力&思维)
题目描述
有这样一种魔板:它是一个长方形的面板,被划分成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 魔板(暴力&思维)的更多相关文章
- 洛谷P1275 魔板
P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...
- 洛谷 P1275 魔板
P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...
- [洛谷P2730] 魔板 Magic Squares
洛谷题目链接:魔板 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都 ...
- 洛谷P2730 魔板 [广搜,字符串,STL]
题目传送门 魔板 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有 ...
- 洛谷 P2730 魔板 Magic Squares 解题报告
P2730 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 ...
- 洛谷 P2730 魔板 Magic Squares
P2730 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 ...
- 洛谷 - P2730 - 魔板 Magic Squares - bfs
写状态转移弄了很久,老了,不记得自己的数组是怎么标号的了. #include <bits/stdc++.h> using namespace std; #define ll long lo ...
- 【题解】魔板—洛谷P1275。
话说好久没更博了. 最近学了好多知识懒的加进来了. 有幸认识一位大佬. 让我有了继续更博的兴趣. 但这是一个旧的题解. 我在某谷上早就发过的. 拿过来直接用就当回归了吧. 其实这道题有一个特别关键的思 ...
- P1275 魔板
题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状态.操作的方式有两 ...
随机推荐
- app后端设计(php)
来源:http://blog.csdn.net/column/details/mobilebackend.html?page=1 做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经 ...
- xcode 手动管理内存 的相关知识点总结
一.XCode4.2以后支持自动释放内存ARC xcode自4.2以后就支持自动释放内存了,但有时我们还是想手动管理内存,这如何处理呢. 很简单,想要取消自动释放,只要在 Build Setting ...
- redis3集群管理
以下操作基于redis3.X版本:Redis集群存储原理:Redis 集群使用数据分片(sharding),而非一致性哈希(consistency hashing)来实现,一个 Redis 集群包含 ...
- Elasticsearch 是什么
Elasticsearch 是什么 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功 ...
- jeecg的开发api接口之旅(http)
一.接口测试工具 1.postman下载地址:https://download.csdn.net/download/qq_35792159/11898005 2.谷歌浏览器插件:https://www ...
- javascript详解1
推荐学习链接: https://book.apeland.cn/details/356/ http://es6.ruanyifeng.com/#README https://developer.moz ...
- jquery复杂节点获取
jquery.find方法 1 $("div").find(".1").css({"color":"red"," ...
- C#向数据库中插入或更新null空值
一.在SQL语句中直接插入null或空字符串“” int? item = null; item == null ? "null" : item.ToString(); item = ...
- Idea导入maven项目
1.idea中有项目的关闭项目 File>>close project 回到截图 下一步>下一步
- 使用SAXReader对XML进行操作
该例子主要使用SAXReader对XML进行操作,browse.xml是Ango框架里面的XML文件 采用两种方法,第一种的全部是iterator,另外一种采用了部分的for each 代码如下 pr ...