zoukankan      html  css  js  c++  java
  • CF486B OR in Matrix

    题目

    CF486B OR in Matrix

    分析

    首先可以发现,如果有 (B[i][j]=0) 那么必然有 (A)(i) 行和 (j) 列都是 (0)

    于是我们可以考虑把这些必须为 (0) 的点全部换成 (0) ,剩下的能放 (1) 就放 (1) 然后检验是否还是满足限制即可。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    template<typename T>
    inline void read(T &x){
    	x=0;bool f=false;char ch=getchar();
    	while(!isdigit(ch)){f|=ch=='-';ch=getchar();}
    	while(isdigit(ch)){x=x*10+(ch^48);ch=getchar();}
    	x=f?-x:x;
    	return ;
    }
    template<typename T>
    inline void write(T x){
    	if(x<0) x=-x,putchar('-');
    	if(x>9) write(x/10);
    	putchar(x%10^48);
    	return ;
    }
    const int N=105;
    #define PII pair<int,int>
    #define pb push_back
    #define fi first
    #define se second
    #define mp make_pair
    #define ll long long
    int n,m;
    int a[N][N],cnt;
    PII t[N*N];
    signed main(){
    	read(n),read(m);
    	for(register int i=1;i<=n;i++) for(register int j=1;j<=m;j++) a[i][j]=1;
    	for(register int i=1;i<=n;i++){
    		for(register int j=1,x;j<=m;j++){
    			read(x);
    			if(x==1){
    				t[++cnt].fi=i,t[cnt].se=j;
    				continue;
    			}
    			for(register int k=1;k<=n;k++) a[k][j]=0;
    			for(register int k=1;k<=m;k++) a[i][k]=0;
    		}
    	}
    	for(register int i=1;i<=cnt;i++){
    		int tmp=0;
    		for(register int k=1;k<=n;k++) tmp|=a[k][t[i].se];
    		for(register int k=1;k<=m;k++) tmp|=a[t[i].fi][k];
    		if(!tmp) return puts("NO"),0;
    	}
    	puts("YES");
    	for(register int i=1;i<=n;i++){
    		for(register int j=1;j<=m;j++) write(a[i][j]),putchar(' ');
    		putchar('
    ');
    	}
    	return 0;
    }
    
  • 相关阅读:
    在现有项目中使用AspNet Identity 2.0 实战
    SQL 带自增长列的表的插入
    在C++中子类继承和调用父类的构造函数方法
    C++继承
    C++中重载、重写(覆盖)和隐藏的区别实例分析
    C++类
    C++中头文件(.h)和源文件(.cpp)都应该写些什么
    C++模板
    C语言字符串操作总结大全
    C++ 标准模板库(STL)
  • 原文地址:https://www.cnblogs.com/Akmaey/p/15266117.html
Copyright © 2011-2022 走看看