SRM569 DIV2 -Level2

問題


①2次元の1と0で表わされる配列が与えられる。
②各列ごとに、任意の2つのビットを入力するとXOR,OR,ANDいずれかの計算結果が返ってくるマシーンがある。
③マシーンは各列ごとにどの操作をするか決まっているが、どの操作が行われるかは明らかにされていない。
④このとき、与えられた配列に対して各列のマシーンがどの操作を行っているか判定することができれば”YES”、できなければ”NO”を返す。

解き方


どのような法則があるか、各操作ごとに例をいくつか出して導く。
各操作の結果について列挙する。
OR
00→0 01→1 11→1
XOR
00→0 01→1 11→0
AND
00→0 01→0 11→1

つまり、
ORとXOR 11のビット列が必要
ORとAND 01のビット列が必要
XORとAND 01か11のビット列が必要となる。
ここから、OR,XOR,ANDの判断には、001があればよいことがわかる。
これを全ての列に対して判定する。

コード


class TheDeviceDiv2 {

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

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

};

Share this

Related Posts

Previous
Next Post »