扯在前面

本人找规律找了很长时间,然后发现找到规律之后其实是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. 搭建一个简单的springMVC框架

    //新建一个简单的maven项目,选择war包 //web.xml配置 <?xml version="1.0" encoding="UTF-8"?> ...

  2. 深入浅出Mybatis系列 强大的动态SQL

    上篇文章<深入浅出Mybatis系列(八)---mapper映射文件配置之select.resultMap>简单介绍了mybatis的查询,至此,CRUD都已讲完.本文将介绍mybatis ...

  3. Selenium执行JavaScript脚本

    JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页.可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在We ...

  4. 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

    这可以使用 DEV 工具来实现.通过这种依赖关系,您可以节省任何更改,嵌入式 tomcat将重新启动.Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力.Ja ...

  5. web前台界面的两种验证方式

    JSON的全称是"JavaScript Object Notation",意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式. 第一种: 用户体 ...

  6. Lightweight Render Pipeline

    (翻译) Lightweight Render Pipeline (LWRP),轻量级渲染管线,是一个Unity预制的Scriptable Render Pipeline (SRP).LWRP可以为移 ...

  7. Windows10搭建本地ftp服务器

    首先要有一个win10专业版的操作系统,连接上互联网... 一.首先打开控制面板选择程序,再选择"启用或关闭windows功能" 二.在"Windows功能"中 ...

  8. Future.get(并发之从任务中产生返回值)

    import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java ...

  9. 在onelogin中使用OpenId Connect Authentication Flow

    目录 简介 OpenId Connect和Authentication Flow简介 onelogin的配置工作 使用应用程序连接onelogin 程序中的关键步骤 总结 简介 onelogin是一个 ...

  10. 第12章 DOM操作

    目录 *1. 向DOM中注入HTML 1.1 将HTNL字符串转换成DOM 预处理HTML源字符串 包装HTML 1.2 将DOM元素插入到文档中 2. DOM的特性和属性 通过DOM方法和属性访问特 ...