SRM511 Div1 Easy - Zoo

解法

 一番身長が高いもの以外、ある数字を言う動物は1匹か2匹。0から最大値までそれ以外が出てきたらおかしく、また一度1になってから再び2になるのもおかしいのでそれも弾く。それ以外2匹のときはどっちかを選べるので×2,最後が1だったらさらに×2をすれば答えが求まる。

コード

#include"bits/stdc++.h"
using namespace std;
using ll = int64_t;

class Zoo {
public:
    long long theCount(vector<int> answers) {
        sort(answers.begin(), answers.end());
        vector<ll> num(answers.back() + 1, 0);
        for (int a : answers) {
            num[a]++;
        }
        ll ans = 1;
        for (int i = 0; i <= answers.back(); i++) {
            if (num[i] > 2 || num[i] <= 0) {
                //数がおかしい
                return 0;
            }
            if (i > 0 && num[i] > num[i - 1]) {
                //増えるわけはない
                return 0;
            }
            ans *= num[i];
        }
        if (num[answers.back()] == 1) {
            ans *= 2;
        }
        return ans;
    }
};