Cod sursa(job #2840028)

Utilizator AffectiveSmile2Mihnea Matea AffectiveSmile2 Data 26 ianuarie 2022 22:17:41
Problema Perle Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.4 kb
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
ifstream f("perle.in");
ofstream g("perle.out");
stack<int> stiva;
///A=1, B=2, C=3
int n,lungime;
char x[10010],test[10010];
int main()
{
    int i,j,inStiva=0,sfStiva=0,indice,element;
    bool ok;
    f>>n;
    for(i=1; i<=n; i++)
    {
        f>>lungime;
        ok=0;
        for(j=1; j<=lungime; j++)
            f>>test[j];
        if(lungime==1)
            g<<'1'<<'\n';
        else if(lungime==3&&test[1]=='1'&&test[2]=='2')
            g<<'1'<<'\n';
        else if(lungime==3)
            g<<'0'<<'\n';
        else
        {
            indice=1;
            if(test[1]=='3')
            {
                stiva.push(3);
            }
            else
            {
                stiva.push(2);
            }
            ok=1;
            inStiva=1;
            while(!stiva.empty()&&ok==1&&indice<=lungime)
            {
                element=stiva.top();
                stiva.pop();
                /*if(i==3)
                    cout<<element<<' '<<test[indice]<<' '<<indice<<'\n';*/
                if(element==2)
                {
                    if(test[indice]=='2')
                    {
                        indice++;
                        stiva.push(2);
                    }
                    else if(test[indice]=='1'&&test[indice+2]=='3')
                    {
                        indice+=4;
                        stiva.push(3);
                    }
                    else ok=0;
                }
                else if(element==3)
                {
                    if(test[indice]=='2')
                        indice++;
                    else if(test[indice]=='3')
                    {
                        stiva.push(3);
                        stiva.push(2);
                        indice++;
                    }
                    else if(test[indice]=='1'&&test[indice+1]=='2')
                    {
                        indice+=3;
                    }
                    else ok=0;
                }
            }
                if(indice<lungime||!stiva.empty())
                    {
                        ok=0;
                        /*if(i==1)
                            cout<<inStiva<<' '<<sfStiva<<' '<<indice<<' '<<test[0]-48;*/
                    }
                g<<ok<<'\n';
        }
    }

}