扯在前面

本人找规律找了很长时间,然后发现找到规律之后其实是lj题,于是五分钟敲完代码,然后WA了两发

正文

题意:

A, B 都是 n*m 的 01 矩阵,已知 B 矩阵是由A矩阵以一种规则生成

Bij 是由 A 矩阵的第 i 行行的所有元素和第 j 列列的所有元素进行 或运算 得到

给定B矩阵,求是否存在一个矩阵A能被合理生成;

不懂的同学可以先了解一下或运算

传送门


分析:

因为我们已知以下关系且每次参与运算的是一整行和一整列的所有数

0|0=0;  0|1=1;  1|0=1;  1|1=1;

所以

  • 当某个位置只要出现一个零,那么他对应矩阵所在的整行或整列如果是零都会是零,因为只要出现一个一,他就不可能是零;
  • 这样的话当然我们也会知道知道,当某行或某列出现一个一时,那他的整行整列必定会出现至少一个一,因为只要有一参与或运算就会是一

做法

知道这两个结论之后我们就可以用简单的方法做题了

根本不用或运算符|,而是另一种方法:

  1. 先把A矩阵赋值为只有1的矩阵,然后填零
  2. 当在B矩阵中找到某个位置是0时,就把A矩阵对应的整行整列都赋值成0
  3. 当在B矩阵中找到某个位置是1时,就查看一下A矩阵对应的行与列是否有1,若没有则为NO
  4. 剩下的输出YES

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#define maxn 500
using namespace std;
int n,m,b[maxn][maxn],a[maxn][maxn];
int cnt;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>b[i][j];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(b[i][j]==0){
for(int k=1;k<=n;k++)
a[k][j]=0;
for(int k=1;k<=m;k++)
a[i][k]=0;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(b[i][j]==1){
for(int k=1;k<=n;k++)
if(a[k][j]==1){
cnt++;
break;
}
for(int k=1;k<=m;k++)
if(a[i][k]==1){
cnt++;
break;
}
if(cnt==0){
cout<<"NO";
return 0;
}
}
}
}
cout<<"YES"<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}

制作不易,请各位批评指正

CF486B的更多相关文章

  1. CF486B OR in Matrix(构造+思维)

    CF486B 一道有趣的思维题 由于or的性质可知只要a[i][j]为1那么b中第i行,第j列将都变成1 相反的,如果b[i][j]是0那么a中第i行,第j列都必须是0 根据第二个性质我们可以构造出a ...

  2. cf486B OR in Matrix

    B. OR in Matrix time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  3. ACM团队周赛题解(2)

    拉了CF583和CF486的两套div2题目 还是先贴宏定义部分 #define MAXN 1000000+5#define MOD 1000000007#define PI (acos(-1.0)) ...

随机推荐

  1. List<bean> 转换成List<Map>

    //将listmap转换成list实体类 List<OaAttachment>list=new ArrayList<OaAttachment>(); if(Func.isNot ...

  2. Java学习日报9.30

    ********************************** double类型精度问题 ********************************** 1 package test; 2 ...

  3. 最全总结 | 聊聊 Python 办公自动化之 PPT(中)

    1. 前言 上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作 最全总结 | 聊聊 Python 办公自动化之 PPT(上) 作为 ...

  4. Logstash-input-jdbc同步mysql数据到ES - sql_last_value

    问题:使用 Logstash-input-jdbc同步mysql到ES, 当中使用了 sql_last_value ,如何重新同步? 答: logstash把上一次同步的最后一条记录id写到 c:\用 ...

  5. AI算法测评事项

    前言 注:大概2017年-2018年国内人工智能热度达到顶峰,随后热度开始逐渐减少.2018年前人工智能被投资界.学术界.工业界和媒体炒的特别热,各大企业都想尝试一下深度学习技术在业务场景的应用.试水 ...

  6. post请求下载文件,获取Content-Disposition文件名

    1.post下载文件代码,doload方法 import request from "../../src/utils/request"; import { API } from & ...

  7. asp.net core 学习笔记

    项目整体感知 项目初始化 项目启动流程: Program.cs Microsoft.Extensions.Hosting.Host => CreateHostBuilder().UseStart ...

  8. redis简介与window安装:

    redis简介与window安装: 花开堪折直需折,莫待无花空折枝 Redis 概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(ke ...

  9. Jetbrains系列产品重置试用方法

    0x0. 项目背景 Jetbrains家的产品有一个很良心的地方,他会允许你试用30天(这个数字写死在代码里了)以评估是否你真的需要为它而付费.但很多时候会出现一种情况:IDE并不能按照我们实际的试用 ...

  10. Java高并发与多线程(一)-----概念

    其实之前一直想专门写一篇,单独说一说Java的多线程与高并发,但是一直以来,都没有想到能够用什么比较有趣的表现形式去表达出来,而且网上充斥着很多类似的博客,有好的又不好的,有简介的有繁琐的,所以也一直 ...