Problem Description

Input

从文件 world.in 中读入数据。

Output

输出到文件 world.out 中。

输出共 T 行,第 i 行表示第 i 组测试数据的答案,如果可行则输出 Yes,否则输出 No。

Sample Input Copy

样例输入1:
1
2 3
000
000
111
001 样例输入2:
1
3 4
0000
0101
0001
1011
0001
1100 样例输入3:
1
4 5
11000
01010
00011
10110
00011
11001
11010
10001

Sample Output Copy

样例输出1:
Yes 样例输出2:
Yes 样例输出3:
No

Data Constraint

首先,\(A\gets A\oplus B\),我们的问题就变成了怎么操作使得一个空矩阵变成新的矩阵 \(A\)。


先考虑只能操作行和列,该怎么做。

如果这张图是合法的,我们发现对于任意的 \(2\times2\) 子矩阵 \(\begin{bmatrix}
a_{0,0} & a_{0,1} \\
a_{1,0} & a_{1,1}
\end{bmatrix}\),有 \(a_{0,0}\oplus a_{0,1}\oplus a_{1,0}\oplus a_{1,1}=0\)。

我们来证明一下,因为对于操作行和列,一定会操作 \(2\times2\) 子矩阵中的任意两个,那么异或结果不变。

所以,我们定义 \(a_{0,0},a_{0,1},a_{1,0},a_{1,1}\) 这类异或结果不变的为固定元素,其余的为不固定元素。

\(2\times2\) 子矩阵中有固定元素,也就是这个子矩阵被固定了,所以它合法。


存不存在更小的子矩阵呢?比如说 \(1\times1\) 子矩阵。

答案是不存在的,因为对于一个 \(1\times1\) 子矩阵 \(\begin{bmatrix}
a_{0,0}
\end{bmatrix}\),我们可以随意修改这个点,所以不存在固定元素,不合法。


考虑加入对角线操作。

如果还是刚刚的 \(2\times2\) 矩阵,我们发现由于对角线操作的加入可以出现形如 \(\begin{bmatrix}
0 & 1 \\
1 & 1
\end{bmatrix}\),\(\begin{bmatrix}
0 & 0 \\
0 & 1
\end{bmatrix}\) 等等等等的矩阵,子矩阵中没有一个元素是固定元素,这个子矩阵是不固定的!

所以考虑更大的子矩阵。


考虑一个 \(4\times4\) 子矩阵,我们发现对于任意的 \(4\times4\) 子矩阵 \(\begin{bmatrix}
a_{0,0} & \textcolor{red}{a_{0,1}} & \textcolor{red}{a_{0,2}} & a_{0,3} \\
\textcolor{red}{a_{1,0}} & a_{1,1} & a_{1,2} & \textcolor{red}{a_{1,3}} \\
\textcolor{red}{a_{2,0}} & a_{2,1} & a_{2,2} & \textcolor{red}{a_{2,3}} \\
a_{3,0} & \textcolor{red}{a_{3,1}} & \textcolor{red}{a_{3,2}} & a_{3,3} \\
\end{bmatrix}\),有 \(a_{0,1}\oplus a_{0,2}\oplus a_{1,0}\oplus a_{1,3}\oplus a_{2,0}\oplus a_{2,3}\oplus a_{3,1}\oplus a_{3,2}=0\)。(为了方便我将这些固定元素标红)

证明显然:

  • 对于 \(a_{0,0},a_{0,3},a_{3,0},a_{3,3}\),可以进行一个对角线操作,所以这些元素是可以随便调整的,是不固定元素;
  • 对于 \(a_{0,1},a_{0,2},a_{1,0},a_{1,3},a_{2,0},a_{2,3},a_{3,1},a_{3,2}\),这些元素无法抵消,只能进行对角线同时操作两个固定元素,所以异或结果不会变化;
  • 对于 \(a_{1,1},a_{1,2},a_{2,2},a_{2,2}\),这些元素可以通过乱搞抵消,具体自己乱搞。

所以这个子矩阵是固定的。

我们继续发现,不存在比 \(4\times4\) 还小的子矩阵。


所以这道题就很简单了,枚举矩阵 \(A\) 的子矩阵左上角 \((i,j)\),只需要所有的子矩阵均满足满足 \(a_{i,j+1}\oplus a_{i,j+2}\oplus a_{i+1,j}\oplus a_{i+1,j+3}\oplus a_{i+2,j}\oplus a_{i+2,j+3}\oplus a_{i+3,1}\oplus a_{j+3,2}=0\),则这张图有解。

时间复杂度 \(O(nm)\)。


然后这道题就可以开始加强了,比如加入各种新印章,都可以用这种方法轻松解决。

#include <cstdio>
#include <chrono>
#include <random>
using namespace std;
using namespace chrono;
#define ll long long
#define N 1010
ll t, n, m;
char a[N][N], b[N][N];
int main() {
freopen("world.in", "r", stdin);
freopen("world.out", "w", stdout);
scanf("%lld", &t);
while(t--) {
scanf("%lld %lld", &n, &m);
for(ll i = 1; i <= n; i++) {
scanf("%s", a[i]+1);
}
for(ll i = 1; i <= n; i++) {
scanf("%s", b[i]+1);
for(ll j = 1; j <= m; j++) {
if(a[i][j] == b[i][j]) a[i][j] = 0;
else a[i][j] = 1;
}
}
bool flag = 1;
for(ll i = 1; i <= n - 3; i++) {
for(ll j = 1; j <= m - 3; j++) {
if(a[i][j+1] ^ a[i][j+2] ^ a[i+1][j] ^ a[i+1][j+3] ^ a[i+2][j] ^ a[i+2][j+3] ^ a[i+3][j+1] ^ a[i+3][j+2]) {
printf("No\n");
flag = 0;
break;
}
}
if(!flag) break;
}
if(flag) printf("Yes\n");
}
}

6980. 【2021.02.03冬令营模拟】你的世界(world) Another Solution的更多相关文章

  1. 02.02.03第3章 餐饮项目案例(Power BI商业智能分析)

    02.02.03第3章 餐饮项目案例 02.02.03.01餐饮数据理解与读入 00:06:12 02.02.03.02餐饮数据处理 00:29:57 处理生成的表为: 02.02.03.03餐饮数据 ...

  2. [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania

    [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...

  3. 【2020.02.01NOIP普及模拟4】怪兽

    [2020.02.01NOIP普及模拟4]怪兽 文章目录 [2020.02.01NOIP普及模拟4]怪兽 题目描述 输入 输出 输入输出样例 数据范围限制 提示 解析 code 题目描述 PYWBKT ...

  4. 2021.11.03 P6175 无向图的最小环问题

    2021.11.03 P6175 无向图的最小环问题 P6175 无向图的最小环问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给定一张无向图,求图中一个至少包含 33 ...

  5. 2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed)

    2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed) [P2886 USACO07NOV]Cow Relays G - 洛谷 | 计算机科学教育新生 ...

  6. 2021.05.03 T3 数字

    2021.05.03 T3 数字 问题描述 一个数字被称为好数字当他满足下列条件: 1. 它有**2*n**个数位,n是正整数(允许有前导0) 2. 构成它的每个数字都在给定的数字集合S中. 3. 它 ...

  7. 2021.08.03 BZOJ 疯狂的馒头(并查集)

    2021.08.03 BZOJ 疯狂的馒头(并查集) 疯狂的馒头 - 题目 - 黑暗爆炸OJ (darkbzoj.tk) 重点: 1.并查集的神奇运用 2.离线化 题意: 给一个长为n的序列,进行m次 ...

  8. 2021.08.03 P1197 星球大战(并查集)

    2021.08.03 P1197 星球大战(并查集) [P1197 JSOI2008]星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.可以离线处理.把在线变为离 ...

  9. 2021.04.03【NOIP提高B组】模拟 总结

    T1 题目大意:求最小的 \(n\in[0,lim]\) 使得区间 \([L,R]\) 在线段树建树 \(build(0,n)\) 的区间内 考场时想到了正解,结果推式子退错了... 其实就是从下往上 ...

  10. 纪中集训2020.02.03【NOIP提高组】模拟B 组总结反思——登机(board),游戏(game),分组(group)

    T1 JZOJ5535. 登机(board) 比赛时 一在题目列表里看到题目标题,就热血沸腾了,不知道为什么,老师居然放了一道之前做过的题目.我清楚地记得这题是DP,于是很快码了出来.讲一讲我的思路, ...

随机推荐

  1. 一文搞懂Vue的MVVM模式与双向绑定

    v-model 是 Vue.js 框架中用于实现双向数据绑定的指令.它充分体现了 MVVM(Model-View-ViewModel)模式中的双向数据绑定特性.下面我们将详细解释 v-model 如何 ...

  2. 获取input[type="checkbox"]:checked 所在tr中特定元素

    1.要求如下  2.html源码 <div class="btn"> <button type="button" onclick=" ...

  3. 基于python的每日固定时间执行实例解析

    一 概念 datetime模块属性如下所示:   二 源码解析 该源码中,对时间库datetime应用十分到位,可以看作如下所示: import datetime import threading d ...

  4. c语言中静态链接库的创建和使用

    静态链接库的创建 静态链接库其实就相当于压缩包,其内部可以包含多个源文件.但需要注意的是,并非任何一个源文件都可以被加工成静态链接库,其至少需要满足以下 2 个条件: 源文件中只提供可以重复使用的代码 ...

  5. javascript import maps 特性现已被全部主流浏览器支持

    值得庆祝 Import maps 特性现在可以在全部三个主要浏览器内使用 现在主流现代web 应用 引入和利用javascript 是通过 Es module 模块实现. 在开发javascript上 ...

  6. 纯前端实现 PNG 图片压缩 | UPNG.js

    在线 Demo 体验地址 →: https://demos.sugarat.top/pages/png-compress/ 前言 最近在迭代自己的 图床 应用,由于使用时间的累计,存储空间占用越来越大 ...

  7. 记录--Openlayers 高德腾讯、百度、天地图坐标相互转换

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在地图开发过程中,坐标的转换是很常用的功能,国内的话一般西安80(EPSG:4610).北京54(EPSG:2433)转WGS84比较多, ...

  8. QT 智能指针 QPointer QScopedPointer QSharedPointer QWeakPointer QSharedDataPointer 隐式共享 显示共享

    QPointer QPointer 使一种受保护的指针,当其引用的对象被销毁时,它会被自动清除(但是,销毁引用对象还是必须手动delete).QPointer所指向的对象必须是QObject或其派生类 ...

  9. 李沐动手学深度学习pytorch实践笔记

    1.pytorch中的矩阵乘法: 2.标量对向量求导: 3.pytorch的backward函数: 4.如何直观理解梯度下降: 梯度,是个向量,有方向和长度就是向量,向量里的各个元素是偏导.是标量对向 ...

  10. AI实用指南:5分钟搭建你自己的LLM聊天应用

    今天,我们将迅速着手搭建一个高效且富有创意的混元聊天应用,其核心理念可以用一个字来概括--快.在这个快节奏的时代,构建一个基础的LLM(Large Language Model,大型语言模型)聊天应用 ...