Cod sursa(job #2279601)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 9 noiembrie 2018 20:08:38
Problema Perle Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include<fstream>
using namespace std;
ifstream cin("perle.in");
ofstream cout("perle.out");
int st[2][10005],niv[2],valid[2],n,l,x;
int main(){
    cin>>n;
    while(n--){
        cin>>l;
        /// cazul este pentru A
        if(l==1){
            cout<<"1\n";
            continue;
        }
        else{
            valid[0]=valid[1]=1;
            niv[0]=niv[1]=1;
            st[0][1]=5;
            st[1][1]=6;
            while(l--){
                cin>>x;
                for(int i=0;i<2;i++){
                    if(valid[i]){
                        if(st[i][niv[i]]<4){
                            valid[i]=(st[i][niv[i]]==x);
                            --niv[i];
                        }
                        else if(st[i][niv[i]]==4){
                            --niv[i];
                        }
                        else if(st[i][niv[i]]==5){
                            if(x==3) valid[i]=0;
                            else if(x==1){
                                --niv[i];
                                st[i][++niv[i]]=6;
                                st[i][++niv[i]]=4;
                                st[i][++niv[i]]=3;
                                st[i][++niv[i]]=4;
                            }
                        }
                        else{
                            if(x==2) --niv[i];
                            else if(x==1){
                                --niv[i];
                                st[i][++niv[i]]=4;
                                st[i][++niv[i]]=2;
                            }
                            else{
                                --niv[i];
                                st[i][++niv[i]]=6;
                                st[i][++niv[i]]=5;
                                }
                            }
                    }
                    if(!niv[i] && l) valid[i]=0;
                }
            }
            if((!niv[0] && valid[0])||(!niv[1] && valid[1])) cout<<"1\n";
            else cout<<"0\n";
        }
    }
}