タイトル:https://codeforces.com/contest/1016/problem/D
問題の意味:そこにN * Mの行列であり、nは、今、あなたに番号を与えるi番目の[i]はiのラインとOrすべての数を表します。
あなたは私がすべての列の数を表し、または、[i]は数m、I-Bの数を与えます。
Q.缶は、あなたはどんな条件ではなく、出力NO、YESとその出力することができる行列の行列会うを構築します。
分析:YESの場合を考えてみなし、はい場合に限り、すべての行は、排他的論理和と排他的論理和とすべての列に等しく、
理由:すべてのXORおよびXは、すべてのXORおよびアレイ全体の数であり、カラムはまた、それほど明白Yラインを分析し、または多分異なるであり、x == yは同じである必要があり、マトリックスを構成することができるがあります。
構造:シンプルで、直接行のセット数、セット内の別の列に、最も簡単ですが、アカウントに最初の列と交差する最初の行の位置を取って、その後だけ適切にあなたが従うことができ、交差位置を扱います建設のこの簡単な方法
X ^ [i]は、この列とXOR == Bを達成するために、[I]は、これが唯一の場所X ^ [排他的OR最初の列、最初の位置以外の列とを考えるI ] ^ B [i]は、その後、X == yの配慮のために全く同じ論理行
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 CONST INT M = 110 。 INT MP [M] [M]。 int型[M]、B [M]。 int型のmain(){ int型のn、mは、 scanf関数(" %D%D "、&N、&M)。 INT X = 0、Y = 0 。 以下のために(INT iが= 1 ; I <= N; I ++ ){ CIN >> [i]は、X ^ = [I]。 } ため(INT iが= 1 ; I <= M; I ++) CIN>> B [i]は、Y ^ = B [i]は、 もし(!X = Y) プット(" NO " ); 他の{ プット(" YES " ); X ^ = [ 1 ]。 X ^ = B [ 1 ]。 MP [ 1 ] [ 1 ] = X。 以下のために(INT iが= 2 ; I <= N; I ++ ) MP [I]は、[ 1 ] = [I]。 用(INT iは= 2 I ++; I <= M ) MP [ 1 ] [I] = B [i]は、 以下のために(INT iが= 1 ; I <= N; I ++ ){ ため(INT J = 1 ; J <= Mであり、j ++ ) COUT << MP [I] [J] << " " 。 coutの << てendl; } } 戻り 0 。 }