Cod sursa(job #2326797)

Utilizator canmihaiCancescu Mihai canmihai Data 23 ianuarie 2019 23:55:14
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
 using namespace std;
ifstream fin("perle.in");
ofstream fout("perle.out");
int c,n,v[10010],rez,k;
int A() {
  if (k >= n) {
    return 0;
  }
  k++;
  return 1;
}

int termen(int value) {
  if (k >=n || v[k] != value) {
    return 0;
  }
  k++;
  return 1;
}
int C();
int parseB() {
  if (k >= n) {
    return 0;
  }
  switch (v[k]) {
  case 1:
    return termen(1)&&A()&&termen(3)&&A()&&C();
  case 2:
    return termen(2) && parseB();
  default:
    return 0;
  }
}
int C() {
  if (k>=n) {
    return 0;
  }
  switch (v[k]){
  case 1:
    return termen(1)&&termen(2)&& A();
  case 2:
    return termen(2);
  case 3:
    return termen(3)&&parseB() && C();
  default:
    return 0;
  }
}
int parseS() {
  if (n==1) {
    return 1;
  }
  k=0;
  int rez=parseB();
  if (k==n&&rez) {
    return 1;
  }

  k=0;
  rez = C();
  if (k==n&&rez) {
    return 1;
  }
  return 0;
}
int main() {
  fin>>c;
  while(c){
    fin>>n;
    for (int i=0;i<n;i++) {
      fin>>v[i];
    }
    rez=parseS();
    fout<<rez<<"\n";
    c--;
  }


}