Cod sursa(job #2533073)

Utilizator marius004scarlat marius marius004 Data 28 ianuarie 2020 18:59:14
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <fstream>

std::ifstream f("perle.in");
std::ofstream g("perle.out");

/*
 A -> 1 | 2 | 3
 B -> 2B | 1A3AC
 C -> 2 | 3BC | 12A
 */

const int NMAX = 10'100;

int n,v[NMAX],i,q;
bool A(),B(),C();

bool A(){
    
    if(i > n)
        return false;
    
    if(v[i] == 1 || v[i] == 2 || v[i] == 3){
        i++;
        return true;
    }
    
    return false;
}

bool B(){
    
    if(i > n)
        return false;
    
    if(v[i] == 2){
        i++;
        return B();
    }
    
    if(v[i] == 1){
        
        i++;
        bool r = A();
        
        if(!r)
            return false;
        
        if(v[i] != 3)
            return false;
        
        if(v[i] == 3){
            i++;
            r = A();
            
            if(!r)
                return false;
            
            return C();
        }
    }
    
    return false;
}

bool C(){
    
    if(i > n)
        return false;
    
    if(v[i] == 2){
        i++;
        return true;
    }
    
    if(v[i] == 3){
        
        i++;
        
        bool r = B();
        
        if(!r)
            return false;
        
        return C();
    }
    
    if(v[i] == 1 && v[i + 1] == 2){
        
        i += 2;
        
        return A();
    }
    
    return false;
}


int main(){
    
    f >> q;
    
    while(q--){
        
        f >> n;
        
        for(int i = 1;i <= n;++i)
            f >> v[i];
        
        i = 1;
        if(A() && i > n){
            g << 1 << '\n';
            continue;
        }
        
        i = 1;
        if(B() && i > n){
            g << 1 << '\n';
            continue;
        }
        
        i = 1;
        if(C() && i > n){
            g << 1 << '\n';
            continue;
        }
        
        g << 0 << '\n';
    }
    
    return 0;
}