SRM511 Div1 Easy(250), Div2 Medium(500) Zoo

Zoo

ウサギもネコもそれぞれ、0,1,2,…,n、0,1,2,…,mという答えになる。answersを2つに分けると、0≦i≦min(n,m)となるiに対しては選び方がそれぞれ2通り、min(n,m)<i≦(n,m)となるiがあるならばもう2通り。

#include <vector>
using namespace std;

class Zoo{public:
long long theCount( vector <int> answers )
{
    int N = (int)answers.size();
    vector<bool> used(N);
    int n[2] = {0,0};

    for ( int i=0; i<2; i++ )
        for ( int j=0; j<N; j++ )
        {
            bool f = false;
            for ( int k=0; !f && k<N; k++ )
                if ( answers[k]==j && !used[k] )
                    used[k] = true,
                    f = true;
            if ( ! f )
                break;
            n[i]++;
        }

    if ( n[0]+n[1] == N )
        return 1ll << ( min(n[0],n[1]) + (n[0]!=n[1]?1:0) );
    else
        return 0;
}};