Cod sursa(job #2244519)

Utilizator georgitTreista Georgiana georgit Data 22 septembrie 2018 22:38:11
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#define N 10000

using namespace std;

ifstream f("perle.in");
ofstream g("perle.out");
int n,v[N+5];
bool verificare(string c)
{
    string s=c;
    int it=0;
    while(it<s.size())
    {
        if(v[it]!=s[it]-'0' and s[it]>='1' and s[it]<='3')
            return 0;
        if(s.size()>n)
            return 0;
        if(s[it]=='A')
        {
            if(v[it]==1)
                s.replace(it,1,"1");
            if(v[it]==2)
                s.replace(it,1,"2");
            if(v[it]==3)
                s.replace(it,1,"3");
        }
        if(s[it]=='B')
        {
            if(v[it]==3)
                return 0;
            if(v[it]==1)
                s.replace(it,1,"1A3AC");
            if(v[it]==2)
                s.replace(it,1,"2B");
        }
        if(s[it]=='C')
        {
            if(v[it]==1)
                s.replace(it,1,"12A");
            if(v[it]==2)
                s.replace(it,1,"2");
            if(v[it]==3)
                s.replace(it,1,"3BC");
        }
        it++;
    }
    if(n!=s.size())
        return 0;
    for(int i=0;i<n;i++)
        if(s[i]-'0'!=v[i])
            return 0;
    return 1;
}
int main()
{
    int T;
    f>>T;
    for(int t=1;t<=T;t++)
    {
        f>>n;
        for(int i=0;i<n;i++)
            f>>v[i];
        if(verificare("A") or verificare("B") or verificare("C"))
            g<<1;
        else
            g<<0;
        g<<"\n";
    }
    return 0;
}