問題
http://community.topcoder.com/stat?c=problem_statement&pm=12388&rd=15489
プレートの問題の応用。
各ビットごとに、XOR,AND,ORいずれかの動作をするデバイスがある。
またビットの和で構成されているプレートがいくつか与えられている。
このとき、各ビットのデバイスがどの動作をしているか判定するために
追加で必要なプレートの数を求める。
解き方
各ビットに1,1,0があればよい。
足りない場合は、各ビットごとに足りない数を求め、その最大値を返してあげればよい。
コード
class TheDevice {
public: int minimumAdditional(vector<string> plates) {
int cost=0;
FORE(j,0,plates[0].size()){
int one=0,zero=0;
FORE(i,0,plates.size()){
if(plates[i][j]=='1')one++;
else zero++;
}
int tmp=3-min(2,one)-min(1,zero);
cost=max(cost,tmp);
}
return cost;
}
};
public: int minimumAdditional(vector<string> plates) {
int cost=0;
FORE(j,0,plates[0].size()){
int one=0,zero=0;
FORE(i,0,plates.size()){
if(plates[i][j]=='1')one++;
else zero++;
}
int tmp=3-min(2,one)-min(1,zero);
cost=max(cost,tmp);
}
return cost;
}
};