Cod sursa(job #213583)

Utilizator madmanjonesJones the one madmanjones Data 10 octombrie 2008 15:41:50
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
using namespace std;
int a[10001],pos,l;
int tryb();
int tryc();

int tryb(){
  if(pos>l)  return 0;
  if(a[pos]!=2&&a[pos]!=1)  return 0;
  if(a[pos]==2){++pos;  return tryb();}
  if(a[pos]==1){
    if(pos+4>l)   return 0;
    if(a[pos+1]<1||a[pos+1]>3)  return 0;
    if(a[pos+2]!=3)   return 0;
    if(a[pos+3]<1||a[pos+3]>3)  return 0;
    pos=pos+4;
    return tryc();
  }
}
int tryc(){
  if(pos<=l&&a[pos]==2){pos++;  return 1;}
  if(pos+2<=l&&a[pos]==1&&a[pos+1]==2&&a[pos+2]>0&&a[pos+2]<4){pos+=3;  return 1;}
  if(pos+6>l)  return 0;
  if(a[pos]!=3)  return 0;
  ++pos;
  if(tryb())
    return tryc();
  else return 0;
}
int main(){
  int n,i,j, r;
  ifstream f("perle.in");
  ofstream g("perle.out");
  f>>n;
  for(i=0;i<n;i++){
    pos=0;
    f>>l;
    for(j=0;j<l;j++)
      f>>a[j];
    --l;
    if(l==0&&a[0]>0&&a[0]<4)  r=1;
    else r=0;
    if(!r) r=r||(tryb()&&(pos>=l));
    if(!r) r=r||(tryc()&&pos>=l);
    g<<r<<'\n';
  }
  g.close();
  f.close();
  return 0;
}