Problema Science against spam

Buonasera a tutti,
sto cercando di risolvere il problema in questione:
per farlo ho preso il template disponibile tra gli allegati e ho implementato la funzione da completare nel seguente modo:


#include <algorithm>
int detect(const vector<string>& bad, const vector<string>& good, const vector<string>& email, size_t N) {
    // insert your code here
    bool legitimate = false, spam = false;
    for(register size_t i{}; i<N; ++i)
    {
        if(!spam && binary_search(bad.cbegin(), bad.cend(), email[i]))
        {
            if(legitimate)
                return 0;
            spam = true;
        }
        else if(!legitimate && binary_search(good.cbegin(), good.cend(), email[i]))
        {
            if(spam)
                return 0;
            legitimate = true;
        }
    }
    if(spam)
        return -1;
    if(legitimate)
        return +1;
    return 0;
}

N.B.: nel main ho inserito, affinché binary_search(…) funzioni, due chiamate a std::sort per ordinare i vector good e bad.
Ciò che non capisco è come mai alcune volte la funzione non produca l’output corretto e come mai levando i controlli nei due if !legitimate e !spam il test 003 del subtask 3 fallisca.
Qualcuno per caso riesce a individuare l’errore e a spiegarmelo per favore?

Problema risolto in maniera definitiva eliminando la keyword else.