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等语言。开发者需独立完成应用的开发与部署,具备团队协作和沟通能力,以保证应用质量、性能及用户需求。
243 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 云计算
智慧党建云平台建设方案,组织部党员信息化系统开发
智慧党建云平台是以党的十九大指出的“新时代党的建设总要求”为指引,结合当前党建工作现状,运用互联网、云计算、大数据等信息化技术,所打造的集党的“政治建设、思想建设、组织建设、作风建设、纪律建设、制度建设”于一体的综合性党建工作平台。
767 0
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL修改复制用户及密码
    在生产环境中有时候需要修改复制用户账户的密码,比如密码遗失,或者由于多个不同的复制用户想统一为单独一个复制账户。对于这些操作应尽可能慎重以避免操作不同导致主从不一致而需要进行修复。
1260 0
|
4天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。
|
4天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
378 92
|
5天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~