2021山东省赛 M . Matrix Problem(构造)

简介: 2021山东省赛 M . Matrix Problem(构造)

描述:

A teacher gives his students a problem to test his students’ construction skills.


The teacher has two 0/1 matrices A and B with n rows and m columns, where all the 1 of both matrices separately form a 4-connected block. 4-connected means that each cell is connected with adjacent cells in four directions (up, down, leftward and rightward).


Now the teacher gives a third matrix C with n rows and m columns, and a specifific position of this matrix is 1 if and only if the corresponding positions of the two matrices are 1.


You need to fifind two matrices A and B such that one of the positions of C is 1 if and only if the corresponding positions of A,B are both 1.

输入:

The first line contains two integers n and m (3≤n,m≤500) – the size of the matrices.


The next n lines describe the matrix C. Each of the following n lines contains m characters 0 or 1.


It is guaranteed that the boundaries of the matrix C are 0, i.e., the 1-st row, the 1-st column, the n-th row and the m-th column of the matrix C are 0.

输出:

Print 2n lines and each line has m characters 0 or 1.


The first n lines describe the matrix A.


The next n lines describe the matrix B.


If there are multiple answers, print any of them.


样例输入:


5 5
00000
00100
01010
01100
00000

样例输出;


00000
00100
01110
01100
00000
00000
01110
01010
01110
00000

大意:


给出一个矩阵,为C矩阵,保证C矩阵的边界元素为 0,C矩阵由AB两个矩阵得来,AB矩阵中相同位置都是1 C矩阵中为1,否则C矩阵中元素为 0,AB矩阵中的所有1连通(上下左右四个方向),给出C矩阵,求出AB矩阵;


思路:

构造连通矩阵

首先在C矩阵中的‘1’在AB矩阵中也是‘1’,这时毋庸置疑的,其次我们尝试构造A矩阵的所有奇数行都是‘1’,B矩阵的所有偶数行都是‘1’,这样既不会对C矩阵产生影响(0,1结合为0),又能最大程度上保持连通,(注意不要动边界元素,只处理AB中非边界元素,一会给出原因);


但是这样构造是存在缺陷的,我们给出一组例子


5 5
00000
01100
00000
01110
00000

按照我们刚才的构造方法,AB矩阵分别为


A
00000
01100
01110
01110
00000
B
00000
01110
00000
01110
00000

我们可以明显的看出来B矩阵是不连通的,这时候怎么解决这个问题呢,就要用的我们没处理的边界元素了,我们让A矩阵的第一列全为1,B矩阵的最后一列全为1(反过来也可),就能完美的解决连通问题,也不会影响C矩阵的元素;

构造后的序列


A
10000
11100
11110
11110
10000
B
00001
01111
00001
01111
00001

这时候处理完了,还有最后一个问题,就是一开始为什么不处理边界元素,这是因为假如在AB奇偶行处理的时候把边界元素都处理了,第二次处理第一列和最后一列的时候必定会在边界出现两个矩阵都是‘1’的情况,但是我们C矩阵边界不能有‘1’,因此第一次处理的时候避开边界(必须是第一次处理避开边界);


#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 2*1e5+100;
const int p = 1e4;
const double eps = 1e-8;
int n,m;
string s[501];
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  {
    cin>>s[i];
  }
  //A矩阵 
  printf("1"); 
  for(int i=2;i<=m;i++) printf("0");
  printf("\n");//A第一行
  for(int i=2;i<=n-1;i++)
  {
    printf("1");
    for(int j=1;j<s[i].size()-1;j++)
    {
      if(s[i][j]=='1') printf("1");
      if(s[i][j]=='0')
      {
        if(i%2!=0)
          printf("1");
        else
          printf("0");  
      } 
    }
    printf("0\n");
  }//A中间行
  printf("1"); 
  for(int i=2;i<=m;i++) printf("0");
  printf("\n");//A末行
  for(int i=1;i<m;i++) printf("0");
  printf("1");
  printf("\n");//B第一行
  for(int i=2;i<=n-1;i++)
  {
    printf("0");
    for(int j=1;j<s[i].size()-1;j++)
    {
      if(s[i][j]=='1') printf("1");
      if(s[i][j]=='0')
      {
        if(i%2==0)
          printf("1");
        else
          printf("0");  
      } 
    }
    printf("1\n");
  }//B中间行
  for(int i=1;i<m;i++) printf("0");
  printf("1");
  printf("\n");//B末行
}

反思:很好的一个构造题,很多构造体都和矩阵有关,和奇数偶数有关,持续学习,加油!


目录
相关文章
|
移动开发 前端开发 JavaScript
谈谈你对移动应用全栈开发的理解。
**全栈移动开发**涉及前端、后端、数据库及服务器技能,包括HTML、CSS、JavaScript、Java等语言。开发者需独立完成应用的开发与部署,具备团队协作和沟通能力,以保证应用质量、性能及用户需求。
165 3
|
XML Java 数据格式
|
Java 微服务 Spring
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(一) (mini-cloud) 整体架构图
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(一) (mini-cloud) 整体架构图
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(一) (mini-cloud) 整体架构图
|
并行计算 iOS开发 MacOS
Metal每日分享,调整图片角度滤镜效果
Metal每日分享,调整图片角度滤镜效果
Metal每日分享,调整图片角度滤镜效果
|
大数据 BI 云计算
智慧党建云平台建设方案,组织部党员信息化系统开发
智慧党建云平台是以党的十九大指出的“新时代党的建设总要求”为指引,结合当前党建工作现状,运用互联网、云计算、大数据等信息化技术,所打造的集党的“政治建设、思想建设、组织建设、作风建设、纪律建设、制度建设”于一体的综合性党建工作平台。
717 0
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL修改复制用户及密码
    在生产环境中有时候需要修改复制用户账户的密码,比如密码遗失,或者由于多个不同的复制用户想统一为单独一个复制账户。对于这些操作应尽可能慎重以避免操作不同导致主从不一致而需要进行修复。
1203 0
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
31853 78
如何保证分布式文件系统的数据一致性
|
前端开发 容器
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局
17655 18
|
人工智能 负载均衡 网络性能优化
灵骏可预期网络:Built for AI Infrastructure
通用人工智能离我们越来越近,全世界的关注和投入正在带来日新“周”异的变化。回顾人工智能的诞生和发展历程,人类计算能力的进步几乎牵动了每一次的重大技术突破,当前的大模型热潮更是如此,只是动辄千万亿参数级的模型体量,所需计算资源远超单颗芯片的上限,超大规模的计算集群成为支撑技术发展和应用创新的关键基础设施。面向智能:云基础设施网络技术面临新挑战如何突破单个芯片、单个服务器节点的算力上限,在超大规模情况
31193 10
灵骏可预期网络:Built for AI Infrastructure
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36193 19
设计模式(C++版)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问