Cod sursa(job #2815656)

Utilizator divadddDavid Curca divaddd Data 9 decembrie 2021 23:42:28
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <iostream>
#include <fstream>
#include <string>
#define MAX 20002
using namespace std;
string s = "";
int n,l,v[MAX],k,sol;

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

ifstream fin("perle.in");
ofstream fout("perle.out");

bool rezolva(string s, int n){
    for (int i = 0; i < s.size(); i++){
        if (s[i] == 'A'){
            s[i] = v[i+1]+'0';
        }else if(s[i] == 'B'){
            s.erase(i, 1);
            if (v[i+1] == 1){
                s.insert(i, "1A3AC");
            }else if (v[i+1] == 2){
                s.insert(i, "2B");
            }
        }else if(s[i] == 'C'){
            s.erase(i, 1);
            if (v[i+1] == 1){
                s.insert(i, "12A");
            }else if (v[i+1] == 2){
                s.insert(i, "2");
            }else if (v[i+1] == 3){
                s.insert(i, "3BC");
            }
        }
        if ((s[i]-'0') != v[i+1] || s.size() > n){
            return false;
        }
    }
    if (s.size() == n)
        return true;
    return false;
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++){
        fin >> l;
        for(int j = 1; j <= l; j++){
            fin >> v[j];
        }
        /// aici intra rezolvarea
        /// NOTE: un sir nu poate incepe nicio data cu A
        /// daca incepe cu A sirul va avea lungimea = 1
        if(l == 1){
            fout << "1\n";
            continue;
        }
        fout << (rezolva("B", l) || rezolva("C", l)) << "\n";
    }
    return 0;
}