SRM569 DIV2 -Level2

<問題>
①0と1で構成される2次元配列が与えられる。
②各ビット列の任意の2つに対し、それぞれORかXORかAND演算をするデバイスがビット列分存在する。
③各ビット列に対しどの操作をするか決まっているが、それがどれかはわかっていない。
④このとき、各デバイスがどの操作をするか確かめることができれば”YES”、できなければ”NO”を返す。

<解き方>
各ビット列に対し、特定の数字が含まれていればデバイスの操作を確かめることができる。
ORとANDの場合
0,1→ORだと1、ANDだと0
ORとXORの場合
1,1→ORだと1、XORだと0
ANDとXORの場合
0,1→ANDだと0、XORだと1
1,1→ANDだと1、XORだと0

この3つを判定するには、1が2つ、0が1つ最低あればよいことになる。
各ビット列に対し1が2つ、0が1つ以上あるか判定し、
なければNO,あればYESを返す。

<コード>
class TheDeviceDiv2 {

public: string identify(vector<string> plates) {

FORE(j,0,(int)plates[0].size()){
int one=0,zero=0;
FORE(i,0,(int)plates.size()){
if(plates[i][j]=='1')one++;
else zero++;
}
if(!(one>=2 && zero>=1))return "NO";
}
return "YES";
}

};
このエントリーをはてなブックマークに追加