Cod sursa(job #1572437)

Utilizator claudiuarseneClaudiu Arsene claudiuarsene Data 18 ianuarie 2016 22:06:51
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 kb
#include<fstream>
#include<cstring>
using namespace std;
int t, n, i;
int v[10005];
char s[20005];
ifstream fin("perle.in");
ofstream fout("perle.out");
int f(){
    int u = 1, i;
    for(i = 1; i <= n; i++){
        if(s[u] == 'A'){
            u--;
        }
        else{
            if(s[u] == 'B'){
                if(v[i] == 2){
                    s[u] = 'B';
                }
                else{
                    if(v[i] == 1){
                        s[u] = 'C';
                        s[++u] = 'A';
                        s[++u] = '3';
                        s[++u] = 'A';
                    }
                    else{
                        return 0;
                    }
                }
            }
            else{
                if(s[u] == 'C'){
                    if(v[i] == 2){
                        u--;
                    }
                    else{
                        if(v[i] == 3){
                            s[u] = 'C';
                            s[++u] = 'B';
                        }
                        else{
                            s[u] = 'A';
                            s[++u] = '2';
                        }
                    }
                }
                else{
                    if(v[i] == s[u] - '0'){
                        u--;
                    }
                    else{
                        return 0;
                    }
                }
            }
        }
        if(n - i < u){
            return 0;
        }
    }
    return 1;
}
int main(){
    fin>> t;
    for(; t; t--){
        fin>> n;
        for(i = 1; i <= n; i++){
            fin>> v[i];
        }
        memset(s, 0, sizeof(s));
        s[1] = 'A';
        if(f() == 1){
            fout<<"1\n";
            continue;
        }
        memset(s, 0, sizeof(s));
        s[1] = 'B';
        if(f() == 1){
            fout<<"1\n";
            continue;
        }
        memset(s, 0, sizeof(s));
        s[1] = 'C';
        if(f() == 1){
            fout<<"1\n";
            continue;
        }
        fout<<"0\n";
    }
    return 0;
}