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;
  }
};