(事業部の定格。2)教育Codeforcesラウンド48 XORの考え方

タイトル: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 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/starve/p/11839277.html