Cod sursa(job #3241860)

Utilizator divadddDavid Curca divaddd Data 5 septembrie 2024 12:26:49
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e4+2;
int t,n,v[NMAX],pos;
bool valid;

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

void check(char ch){
  if(ch == 'A'){
    // A -> {1, 2, 3};
    pos++;
  }else if(ch == 'B'){
    if(v[pos] == 2){
      // B = 2B
      pos++;
      check('B');
    }else if(v[pos] == 1 && v[pos+2] == 3){
      // B = 1A3AC
      pos++;
      check('A');
      pos++;
      check('A');
      check('C');
    }else{
      valid = false;
    }
  }else if(ch == 'C'){
    // C -> {2; 3BC; 12A}
    if(v[pos] == 2){
      pos++;
    }else if(v[pos] == 3){
      pos++;
      check('B');
      check('C');
    }else if(v[pos] == 1 && v[pos+1] == 2){
      pos += 2;
      check('A');
    }else{
      valid = false;
    }
  }
}

int main(){
  fin >> t;
  while(t--){
    fin >> n;
    for(int i = 1; i <= n; i++){
      fin >> v[i];
    }
    bool ans = false;
    for(char ch: {'A', 'B', 'C'}){
      if(!ans){
        pos = 1;
        valid = true;
        check(ch);
        ans |= (valid && pos == n+1);
      }
    }
    fout << ans << "\n";
  }
  return 0;
}