TopCoder SRM 361 Div1 Easy WhiteHats
問題
n人の人がいて、それぞれ白または黒どちらかの色の帽子をかぶっている。
それぞれの人に対して、「自分以外で白い帽子をかぶっている人は何人いるか」という質問をした。
質問の答えがcount[]により与えられるとき、白い帽子をかぶっている人の人数を求めよ。
どのような人数でも矛盾が生じるときは-1を返せ。
制約条件
n≦50
count[i]≦50
方針
count中の最大値と最小値の差は1以下であるはずである。
そうでない場合は矛盾。
countの中の最大値と最小値の差が0のときは、
全員が白い帽子をかぶっているか、黒い帽子をかぶっているとき。
前者のときは全員n-1を答えているはずで、後者のときは全員0を答えているはず。
最大値と最小値の差が1のときは、
最大値を答えた人が黒い帽子をかぶっていて、最小値を答えた人が白い帽子をかぶっているはず。
ソースコード
class WhiteHats { public: int whiteNumber(vector <int> count) { sort(all(count)); int n=count.size(),m=0; rep(i,n)if(count[i]==count[0])m++; if(count[n-1]-count[0]>1)return -1; if(count[n-1]==0)return 0; if(count[n-1]==count[0])return n==count[0]+1?n:-1; return count[n-1]==m?m:-1; } };