程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CF#277 (Div. 2) B.(Ô¤´¦Àí)

CF#277 (Div. 2) B.(Ô¤´¦Àí)

編輯:C++入門知識

CF#277 (Div. 2) B.(Ô¤´¦Àí)


B. OR in Matrix time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output ÌâÄ¿Á´½Ó£ºhttp://codeforces.com/contest/486/problem/B

Let's define logical OR as an operation on two logical values (i. e. values that belong to the set {0,?1}) that is equal to 1 if either or both of the logical values is set to 1, otherwise it is 0. We can define logical OR of three or more logical values in the same manner:

\ where \ is equal to 1 if some ai?=?1, otherwise it is equal to 0.

Nam has a matrix A consisting of m rows and n columns. The rows are numbered from 1 to m, columns are numbered from 1 to n. Element at row i (1?¡Ü?i?¡Ü?m) and column j (1?¡Ü?j?¡Ü?n) is denoted as Aij. All elements of A are either 0 Z†·Ÿ"http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vciAxLiBGcm9tIG1hdHJpeCA8ZW0+QTwvZW0+LAogTmFtIGNyZWF0ZXMgYW5vdGhlciBtYXRyaXggPGVtPkI8L2VtPiBvZiB0aGUgc2FtZSBzaXplIHVzaW5nIGZvcm11bGE6PC9wPgo8cD4KPGltZyBhbGlnbj0="middle" class="tex-formula" src="http://www.bkjia.com/uploads/allimg/141115/04045L1a-2.png" alt="\">.

(Bij is OR of all elements in row i and column j of matrix A)

Nam gives you matrix B and challenges you to guess matrix A. Although Nam is smart, he could probably make a mistake while calculating matrix B, since size of A can be large.

Input

The first line contains two integer m and n (1?¡Ü?m,?n?¡Ü?100), number of rows and number of columns of matrices respectively.

The next m lines each contain n integers separated by spaces describing rows of matrix B (each element of B is either 0 or 1).

Output

In the first line, print "NO" if Nam has made a mistake when calculating B, otherwise print "YES". If the first line is "YES", then also print mrows consisting of n integers representing matrix A that can produce given matrix B. If there are several solutions print any one.

Sample test(s) input
2 2
1 0
0 0
output
NO
input
2 3
1 1 1
1 1 1
output
YES
1 1 1
1 1 1
input
2 3
0 1 0
1 1 1
output
YES
0 0 0
0 1 0



½âÌâ˼·£º
	ÌâÄ¿´óÒâ¾ÍÊǸøÄãmºÍn£¬½ÓÏÂÀ´ÊäÈëm*nµÄB¾ØÕó£¬ÎÊÊÇ·ñ´æÔÚÒ»¸öm*nµÄA¾ØÕó£¬Ê¹µÃ¶ÔÓÚBijÕâ¸öÔªËØÀ´Ëµ£¬ËüÊÇÓÉA¾ØÕóµÄµÚiÐÐËùÓÐÔªËغ͵ÚjÁÐËùÓÐÔªËØ¡°»òÔËË㡱µÃÀ´¡£´æÔڵĻ°Êä³öYES£¬²¢Êä³öÈÎÒâÒ»×é·ûºÏÌõ¼þµÄA¾ØÕ󣬷ñÔòÊä³öNO¡£
	Îҵķ½·¨»¹ÊÇÆ«±©Á¦£¬Ê×ÏÈ¿ªÒ»¸ö¶þάÊý×é´æA¾ØÕ󣬲¢¶ÔÆä³õʼ»¯ÔªËØȫΪ1¡£Ê×ÏÈÕâÑù¿¼ÂÇ£¬Èç¹ûBij¶ÔÓ¦µÄ值Ϊ0£¬ÄÇôA¾ØÕóµÄµÚiÐк͵ÚjÁÐÒ»¶¨È«²¿Îª0£¬³öÏÖÒ»¸ö1¶¼²»ÐУ¬ÒòΪ¡°»òÔËË㡱ȫ0³ö0¡£ÕâÑù¸üÐÂÒ»±éºó£¬A¾ØÕóµÄ0µÄλÖþÍÄÜÈ«²¿È·¶¨ÁË¡£½ÓÏÂÀ´×Á¦µÄ²¿·ÖO£¨n*m*max(n,m)£©µÄÅжÏA¾ØÕóÿ¸öλÖõÄÔªËØÊÇ·ñÂú×ãB¾ØÕóÖÐ0»ò1µÄÌõ¼þ¡£×îºóflagû±äµÄ»°£¬ËµÃ÷´æÔÚÕâÑùµÄA¾ØÕó£¬Í¬Ê±A¾ØÕóÒ²±»ÎÒÃǸüкÃÁË£¬Êä³ö¼´¿É£»·´Ö®£¬²»´æÔÚÊä³öNO¡£


ÍêÕû´úÂ룺
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#pragma comment(linker, "/STACK:102400000,102400000")

typedef long long LL;
typedef double DB;
typedef unsigned uint;
typedef unsigned long long uLL;

/** Constant List .. **/ //{

const int MOD = int(1e9)+7;
const int INF = 0x3f3f3f3f;
const LL INFF = 0x3f3f3f3f3f3f3f3fLL;
const DB EPS = 1e-9;
const DB OO = 1e20;
const DB PI = acos(-1.0); //M_PI;
int n , m;
int g[1111][1111];
int res[1111][1111];



bool check_0(int x , int y)
{
    for(int i = 0 ; i < m ; i ++)
    {
        if(res[x][i] == 1)
            return false;
    }
    for(int i = 0 ; i < n ; i ++)
    {
        if(res[i][y] == 1)
            return false;
    }
    return true;
}


bool check_1(int x , int y)
{
    for(int i = 0 ; i < m ; i ++)
    {
        if(res[x][i] == 1)
            return true;
    }
    for(int i = 0 ; i < n ; i ++)
    {
        if(res[i][y] == 1)
            return true;
    }
    return false;
}

int main()
{
    #ifdef DoubleQ
    freopen("in.txt","r",stdin);
    #endif
    while(~scanf("%d%d",&m,&n))
    {
        for(int i = 0 ; i < m ; i ++)
        {
            for(int j = 0 ; j < n ; j ++)
            {
                scanf("%d",&g[i][j]);
            }
        }
        for(int i = 0 ; i < m ; i ++)
        {
            for(int j = 0 ; j < n ; j ++)
            {
                res[i][j] = 1;
            }
        }
        //int flag = 0 ;
        for(int i = 0 ; i < m ; i ++)
        {
            for(int j = 0 ; j < n ; j ++)
            {
                if(g[i][j] == 0)
                {
                    for(int k = 0 ; k < n ; k ++)
                        res[i][k] = 0;
                    for(int k = 0 ; k < m ; k ++)
                        res[k][j] = 0;
                }
            }
        }
        int flag1 = 0;
        for(int i = 0 ; i < m ; i ++)
        {
            for(int j = 0 ; j < n ; j ++)
            {
                if(g[i][j] == 0)
                {
                    if(!check_0(i , j))
                        flag1 = 1;
                }
                else if(g[i][j] == 1)
                {
                    if(!check_1(i , j))
                        flag1 = 1;
                }
                if(flag1)
                    break;
            }
            if(flag1)
                break;
        }
        if(flag1)
            printf("NO\n");
        else
        {
            printf("YES\n");
            for(int i = 0  ; i < m  ; i ++)
            {
                for(int j = 0 ; j < n ; j ++)
                {
                    printf("%d%c",res[i][j], j == n - 1 ? '\n' : ' ');
                }
            }
        }


    }
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved